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] "Kevin Yu [MSFT]" wrote:
> 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."
>