all groups > dotnet xml > june 2005 >
You're in the

dotnet xml

group:

XSL transform bug...



XSL transform bug... tcdevelopment
6/24/2005 5:56:01 AM
dotnet xml: I have a XSLT file that gives expected results when I transform using MSXML
V4.0 in a simple vbs file. However when using XslTransform in dotnet, I do
not get the same results.

The part of the XSLT file that does not work correctly is:
<Token TokenId="3129">
<xsl:for-each select="EDI/Segment[@ID='PRF']/Element[@Position='1']">
<Value Segment="PRF" Position="1">
<xsl:attribute name="SegmentIndex">
<xsl:value-of select="../@SegmentIndex"/></xsl:attribute>
<xsl:attribute name="ParentSegmentIndex">
<xsl:value-of
select="preceding::Segment[@ID='LX'][position()=1]/@SegmentIndex"/></xsl:attribute>
<xsl:value-of select="."/>
</Value>
</xsl:for-each>
</Token>

Re: XSL transform bug... Pascal Schmitt
6/25/2005 12:00:00 AM
[quoted text, click to view]

Wich results do you get? How were they supposed to look like?


Maybe it helps when you use the short form:

<Token TokenId="3129">
<xsl:for-each select="EDI/Segment[@ID='PRF']/Element[@Position='1']">
<Value Segment="PRF" Position="1" SegmentIndex="{../@SegmentIndex}"
ParentSegmentIndex="{preceding::Segment[@ID='LX'][position()=1]/@SegmentIndex}">
<xsl:value-of select="."/>
</Value>
</xsl:for-each>
</Token>


--
Re: XSL transform bug... Oleg Tkachenko [MVP]
6/26/2005 11:43:10 AM
[quoted text, click to view]

Provide some repro please.

--
Oleg Tkachenko [XML MVP, MCAD]
Re: XSL transform bug... tcdevelopment
6/27/2005 4:18:02 AM
Thanks for the suggestion but unfortunately it did not make any difference if
I used the short form. Any other ideas?

Thanks

[quoted text, click to view]
Re: XSL transform bug... v-kevy NO[at]SPAM online.microsoft.com
6/28/2005 12:00:00 AM
Hi,

Can you provide us with some detailed information. For example, some repro
code and Xml doc, the expected results and actual results. Thanks!

Kevin Yu
=======
"This posting is provided "AS IS" with no warranties, and confers no
rights."
Re: XSL transform bug... Oleg Tkachenko [MVP]
6/28/2005 12:00:00 AM
[quoted text, click to view]

That looks like a bug. Fortunately .NET 2.0 works properly.
As a workaround try this one:

<xsl:attribute name="ParentSegmentIndex"><xsl:value-of
select="preceding::Segment[@ID='LX'][1]/@SegmentIndex"/></xsl:attribute>

--
Oleg Tkachenko [XML MVP, MCAD]
Re: XSL transform bug... tcdevelopment
6/28/2005 5:16:01 AM
I've created a console app that demos the issue I am having. To recreate
this app please do the following

1.) Create a xml file called SampleXML.xml that contains the following:

<EDI>
<Segment ID="LX" SegmentIndex="5">
<Element Position="1"><![CDATA[2]]></Element>
</Segment>
<Segment ID="PRF" SegmentIndex="7">
<Element Position="1"><![CDATA[3630646652]]></Element>
</Segment>
<Segment ID="LX" SegmentIndex="9">
<Element Position="1"><![CDATA[2]]></Element>
</Segment>
<Segment ID="PRF" SegmentIndex="11">
<Element Position="1"><![CDATA[3630646652]]></Element>
</Segment>
<Segment ID="LX" SegmentIndex="16">
<Element Position="1"><![CDATA[1]]></Element>
</Segment>
<Segment ID="PRF" SegmentIndex="18">
<Element Position="1"><![CDATA[3630646652]]></Element>
</Segment>
<Segment ID="LX" SegmentIndex="23">
<Element Position="1"><![CDATA[1]]></Element>
</Segment>
<Segment ID="PRF" SegmentIndex="25">
<Element Position="1"><![CDATA[3604049997]]></Element>
</Segment>
</EDI>

2.) Create a Xsl file called SampleXSL.xsl that contains the following:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<TokenData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Token>
<xsl:for-each select="EDI/Segment[@ID='PRF']/Element[@Position='1']">
<Value>
<xsl:attribute name="ParentSegmentIndex"><xsl:value-of
select="preceding::Segment[@ID='LX'][position()=1]/@SegmentIndex"/></xsl:attribute>
<xsl:value-of select="."/>
</Value>
</xsl:for-each>
</Token>
</TokenData>
</xsl:template>
</xsl:stylesheet>

3.) Create a console app that contains the following code:
static void Main(string[] args)
{
//Transform using XslTransform
XmlDocument sourceXml = new XmlDocument();
sourceXml.Load("SampleXML.xml");

System.Xml.Xsl.XslTransform sourceXsl = new XslTransform();
sourceXsl.Load("SampleXSL.xsl");

XmlUrlResolver xmlResolver = new XmlUrlResolver();
XmlReader xReader = sourceXsl.Transform(sourceXml,null,xmlResolver);

XmlDocument transformedXml = new XmlDocument();
transformedXml.Load(xReader);
transformedXml.Save("TransformedXML.xml");
//Completed Transform using XslTransform

//Transform using MSXML4.0
MSXML2.DOMDocument40Class sourceMSXml = new MSXML2.DOMDocument40Class();
sourceMSXml.load("SampleXML.xml");

MSXML2.DOMDocument40Class sourceMSXsl = new MSXML2.DOMDocument40Class();
sourceMSXsl.async = false;
sourceMSXsl.load("SampleXSL.xsl");

MSXML2.DOMDocument40Class transformMSXml = new MSXML2.DOMDocument40Class();
sourceMSXml.transformNodeToObject(sourceMSXsl,transformMSXml) ;
transformMSXml.save("TransformedMSXML.xml");
//Completed transform using MSXML4.0

}

Once you run this app if you review the two files generated
TransformedMSXML.xml and TransformedXML.xml you can clearly see the issue.
The TransfomredXML.xml file contains the attribute ParentSegmentIndex and it
is always 5 which it shouldn't be.

<TokenData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Token>
<Value ParentSegmentIndex="5">3630646652</Value>
<Value ParentSegmentIndex="5">3630646652</Value>
<Value ParentSegmentIndex="5">3630646652</Value>
<Value ParentSegmentIndex="5">3604049997</Value>
</Token>
</TokenData>

The file TransformedMSXML.xml has the attribute ParentSegmentIndex set
correctly

<?xml version="1.0" encoding="UTF-16"?>
<TokenData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Token>
<Value ParentSegmentIndex="5">3630646652</Value>
<Value ParentSegmentIndex="9">3630646652</Value>
<Value ParentSegmentIndex="16">3630646652</Value>
<Value ParentSegmentIndex="23">3604049997</Value>
</Token>
</TokenData>

Hopefully with this information you can see something to help me out.

Thanks




[quoted text, click to view]
AddThis Social Bookmark Button