Subject: RE: [xsl] How to use document() of doc() function with copy idiom, or how to access nodes of doc() tree From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 25 Jul 2006 15:32:20 +0100 |
Your problem seems to be very simple: <xsl:value-of select="document($input-file)" /> The xsl:value-of instruction writes a text node whose value is the string-value of the input. The string value of a document node is the concatenation of all its text, with no hierarchic structure. You probably want xsl:copy-of or xsl:sequence. Note also: XSLT 2.0 does allow you to run a stylesheet with no principal input document. Just specify a named template as the entry point. If using the Saxon command line you do this with the "it" option, e.g. "-it main". Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Abel Braaksma Online [mailto:abel.online@xxxxxxxxx] > Sent: 25 July 2006 15:03 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] How to use document() of doc() function with > copy idiom, or how to access nodes of doc() tree > > Dear list, > > I have been trying some variants, but I think I've been stuck > in the namespaces and context location labyrinth. What I want > seems easy: I have a set of documents, all valid XML and want > to output the contents of these documents, either as one big > XML document, or as a set of documents. > > In essence: using the copy idiom on each document and, > optionally, doing something with the tree that is input from > the document() function. > > Problem: all my nodes are gone and the external documents are > output as one big piece of text (except for the tags "doc" > and "input-file") and I don't seem to be able to find > specific values, like the "tableData" tag below. I know this > is usually a namespace problem, but I don't know how to solve > it. Because it does not even work for one input file, I > provide a stripped down version of my XSLT below, that parses > one external xml document. > > Namespace of input xml document: this is equal to the current > xslt document (just because saxon needs an input document. I > don't actually use it) Namespace of document() xml doc: > "http://www.nuntia.com/tablewiz1.0" > Namespace of output document: "http://www.nuntia.com/tablewiz1.0" > > XSLT file: > <xsl:stylesheet version="2.0" > xmlns = "http://www.nuntia.com/tablewiz1.0" > exclude-result-prefixes = "nuntia xsl xs fn xdt" > xpath-default-namespace = "http://www.nuntia.com/tablewiz1.0"> > > <xsl:output indent="yes" /> > > <!-- name of the input file or files --> > <xsl:param name="input-file" select="'test.xml'" /> > > <!-- load the documents --> > <xsl:variable name="documents"> > <doc> > <input-filename><xsl:value-of select="." > /></input-filename> > <xsl:value-of select="document($input-file)" /> > </doc> > </xsl:variable> > > <xsl:template match="/"> > <output> > <xsl:for-each select="$documents/doc"> > <xsl:apply-templates select="." mode="copy" /> > </xsl:for-each> > </output> > </xsl:template> > > <xsl:template match="node() | @*" mode="copy"> > <xsl:copy> > <xsl:apply-templates select="@* | node()" mode="copy"/> > </xsl:copy> > </xsl:template> > > </xsl:stylesheet> > > XML file that is input using document() function, namely test.xml: > <?xml version="1.0" encoding="UTF-8"?> > <tableData name="bla"> > <description>Table description</description> > <rows total="3"> > <row id="35" row-index="not-applicable"> > <cell>Row1Cell1</cell> > <cell>Row1Cell2</cell> > </row> > </rows> > </tableData>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to use document() of , Colin Adams | Thread | Re: [xsl] How to use document() of , Abel Braaksma Online |
RE: [xsl] How to use document() of , Colin Adams | Date | Re: [xsl] How to use document() of , Abel Braaksma Online |
Month |