Subject: Re: [xsl] Problem applying XSL to XML that uses a schema From: tim@xxxxxxxxxxx Date: Thu, 9 Dec 2004 06:00:31 -0600 |
George, That did the trick. I knew it would be something simple (in syntax). Thanks very much, Tim Quoting George Cristian Bina <george@xxxxxxx>: > Hi Tim, > > The problem is that you have two different input documents. In the first > case that works all the elements are in no namespace while in the second > case that does not work all the elements are in the > http://www.mydomain.com/mainelement namespace. > When you use an element name in an XPath expression without specifying a > prefix that is considered from no namespace. In order to match your > elements from the http://www.mydomain.com/mainelement namespace you need > to map a prefix to this namespace and use that when you refer to > elements from that namespace, something like below: > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:t="http://www.mydomain.com/mainelement"> > <xsl:output method="xml" version="1.1" indent="yes" /> > > <xsl:template match="comment()"> > <xsl:comment><xsl:value-of select="."/></xsl:comment> > </xsl:template> > > <xsl:template match="t:subelement|@*"> > <xsl:copy> > <xsl:apply-templates select="node()|@*"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="t:mainelement|@*"> > <xsl:copy> > <xsl:apply-templates select="node()|@*"/> > > <xsl:comment >NewSubComment1.1</xsl:comment> > <xsl:text>
</xsl:text> > <subelement name="newsub">content</subelement> > <xsl:comment >NewSubComment1.2</xsl:comment> > </xsl:copy> > </xsl:template> > </xsl:stylesheet> > > Best Regards, > George > --------------------------------------------------------------------- > George Cristian Bina > <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger > http://www.oxygenxml.com > > > tim@xxxxxxxxxxx wrote: > > Hello, > > > > I am trying to apply an XSL stylesheet to an XML file that uses a schema. > > I will discuss first what does work. > > > > The following is the input XML file (XML1): > > <?xml version="1.0" encoding="UTF-8" ?> > > <!-- MainComment1 --> > > <mainelement> > > > > <!-- SubComment1.1 --> > > <subelement name="sub1">content</subelement> > > <!-- SubComment1.2 --> > > > > <!-- SubComment2.1 --> > > <subelement name="sub2">content</subelement> > > <!-- SubComment2.2 --> > > > > </mainelement> > > <!-- MainComment2 --> > > > > > > The following is the xsl I have so far (XSL1): > > <?xml version="1.0" encoding="UTF-8"?> > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output method="xml" version="1.1" indent="yes" /> > > > > <xsl:template match="comment()"> > > <xsl:comment><xsl:value-of select="."/></xsl:comment> > > </xsl:template> > > > > <xsl:template match="subelement|@*"> > > <xsl:copy> > > <xsl:apply-templates select="node()|@*"/> > > </xsl:copy> > > </xsl:template> > > > > <xsl:template match="mainelement|@*"> > > <xsl:copy> > > <xsl:apply-templates select="node()|@*"/> > > > > <xsl:comment >NewSubComment1.1</xsl:comment> > > <xsl:text>
</xsl:text> > > <subelement name="newsub">content</subelement> > > <xsl:comment >NewSubComment1.2</xsl:comment> > > </xsl:copy> > > </xsl:template> > > </xsl:stylesheet> > > > > > > The following is the output from applying XSL1 to XML1 (OUTPUT1): > > <?xml version="1.0" encoding="UTF-8"?> > > <!-- MainComment1 --> > > <mainelement> > > > > <!-- SubComment1.1 --> > > <subelement name="sub1">content</subelement> > > <!-- SubComment1.2 --> > > > > <!-- SubComment2.1 --> > > <subelement name="sub2">content</subelement> > > <!-- SubComment2.2 --> > > > > <!--NewSubComment1.1--> > > <subelement name="newsub">content</subelement> > > <!--NewSubComment1.2--> > > > > </mainelement> > > <!-- MainComment2 --> > > > > > > This is exactly what I want without the schema (OUTPUT1). The problem is > when > > the XML file uses a schema which is my real world problem. > > > > The following is the input XML file that uses the schema (XML2): > > <?xml version="1.0" encoding="UTF-8" ?> > > <!-- MainComment1 --> > > <mainelement > > xmlns="http://www.mydomain.com/mainelement" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.mydomain.com/mainelement > > file:///C:/schemas/mainelement.xsd"> > > > > <!-- SubComment1.1 --> > > <subelement name="sub1">content</subelement> > > <!-- SubComment1.2 --> > > > > <!-- SubComment2.1 --> > > <subelement name="sub2">content</subelement> > > <!-- SubComment2.2 --> > > > > </mainelement> > > <!-- MainComment2 --> > > > > > > When I apply XSL1 to XML2 I get the following output (OUTPUT2): > > <?xml version="1.0" encoding="UTF-8"?> > > <!-- MainComment1 --> > > > > <!-- SubComment1.1 --> > > content > > <!-- SubComment1.2 --> > > > > <!-- SubComment2.1 --> > > content > > <!-- SubComment2.2 --> > > > > <!-- MainComment2 --> > > > > > > > > > > > > OUTPUT2 is clearly not what I want. I want the exact same output as > OUTPUT1 > > except with the schema location and xmlns etc. The following is the > desired > > output (DESIREDOUTPUT): > > <?xml version="1.0" encoding="UTF-8"?> > > <!-- MainComment1 --> > > <mainelement > > xmlns="http://www.mydomain.com/mainelement" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.mydomain.com/mainelement > > file:///C:/schemas/mainelement.xsd"> > > > > <!-- SubComment1.1 --> > > <subelement name="sub1">content</subelement> > > <!-- SubComment1.2 --> > > > > <!-- SubComment2.1 --> > > <subelement name="sub2">content</subelement> > > <!-- SubComment2.2 --> > > > > <!--NewSubComment1.1--> > > <subelement name="newsub">content</subelement> > > <!--NewSubComment1.2--> > > </mainelement> > > <!-- MainComment2 --> > > > > > > > > > > > > Can anyone help me understand how to modify my XSL1 to create the > DESIREDOUTPUT? > > Any help would be greatly appreciated. I have been trying to make this > work > > for days! > > > > > > Thanks, > > > > Tim > > > > > > > > > > > > > > > > > > ---------------------------------------------------------------- > > This message was sent using IMP, the Internet Messaging Program. > > ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Problem applying XSL to X, George Cristian Bina | Thread | RE: [xsl] Problem applying XSL to X, Michael Kay |
AW: [xsl] XSLT 2.0 - Combining Node, Huditsch Roman | Date | RE: [xsl] Problem applying XSL to X, Mukul Gandhi |
Month |