XSLT 字符串 Wrap:How 我是否在换行符 (\n) 的字符串中换行
XSLT String Wrap:How do I wrap words in a String at New line character(\n)
我们想为给定的 XML 编写 XSLT 转换。
我们正在尝试在按下 ENTER KEY 时在换行符处为注释元素换行。其中,<Comment>
个元素在应用 XSLT 转换后拆分为 6 个不同的行项目。
注:
这里的“\n”是换行符。意思是结束当前行,换行。
我们尝试了以下方法:
其中观察到的模式:
<StockCode>
元素为空白,因为每个行项目都有评论子字符串。而 StockCode 元素对所有这些元素都有价值 <comment>
元素为空
<OrderDetail>
这里是重复节点。
输入XML:
<?xml version="1.0" encoding="WINDOWS-1252"?>
-<SalesOrders xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
-<Orders>
-<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
-<OrderDetails>
-<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<OrderDescription>EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016 OTYPE NE TRKPC 01 GM/00007643020008361321</OrderDescription>
</comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails> ---------------------
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders
预期XML XSLT 转换后:
<?xml version="1.0" encoding="WINDOWS-1252"?>
-<SalesOrders xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
-<Orders>
-<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
-<OrderDetails>
-<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<Comment>Nil</Comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails> ---------------------
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders
以上代码分为 6 个不同的行项目(即针对每个 OrderLineID),因此,我们试图在评论字段上实现子字符串。
如何为换行符处的注释子串编写XSLT转换文件?
提前致谢!
为了将问题最小化为此处的主要问题,请考虑以下样式表:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="OrderDetails">
<xsl:copy>
<xsl:variable name="stockcode" select="StockLine/StockCode" />
<xsl:for-each select="tokenize(StockLine/Comment, '\n')">
<StockLine>
<xsl:copy-of select="$stockcode"/>
<Comment>
<xsl:value-of select="normalize-space(.)"/>
</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于以下输入:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS\n C3 Generic\n LOC 0833\n Expected arrival 01/07/2016\n OTYPE NE\n TRKPC 01 GM/00007643020008361321</Comment>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>Expected arrival 01/07/2016</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
我不知道 OrderLineID
的内容应该来自哪里。
重要提示:
如果输入 Comment
包含实际换行符 - IOW,如果您的实际输入是:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS
C3 Generic
LOC 0833
Expected arrival 01/07/2016
OTYPE NE
TRKPC 01 GM/00007643020008361321</Comment>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
然后使用:
<xsl:for-each select="tokenize(StockLine/Comment, '\n')">
已添加:
给定以下输入:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<OrderDescription>EDIORDER-SAVE COMMENTS
C3 Generic
LOC 0833
Expected arrival 01/07/2016
OTYPE NE
TRKPC 01 GM/00007643020008361321</OrderDescription>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
以下样式表:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="StockLine">
<xsl:variable name="i" select="position()" />
<xsl:copy>
<xsl:copy-of select="StockCode"/>
<Comment>
<xsl:value-of select="normalize-space(tokenize(../StockLine[1]/OrderDescription, '\n')[$i])"/>
</Comment>
<xsl:copy-of select="OrderLineID"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将return:
结果
<?xml version="1.0" encoding="UTF-8"?>
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>Expected arrival 01/07/2016</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
我们想为给定的 XML 编写 XSLT 转换。
我们正在尝试在按下 ENTER KEY 时在换行符处为注释元素换行。其中,<Comment>
个元素在应用 XSLT 转换后拆分为 6 个不同的行项目。
注: 这里的“\n”是换行符。意思是结束当前行,换行。
我们尝试了以下方法:
其中观察到的模式:
<StockCode>
元素为空白,因为每个行项目都有评论子字符串。而 StockCode 元素对所有这些元素都有价值 <comment>
元素为空
<OrderDetail>
这里是重复节点。
输入XML:
<?xml version="1.0" encoding="WINDOWS-1252"?>
-<SalesOrders xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
-<Orders>
-<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
-<OrderDetails>
-<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<OrderDescription>EDIORDER-SAVE COMMENTS C3 Generic LOC 0833 Expected arrival 01/07/2016 OTYPE NE TRKPC 01 GM/00007643020008361321</OrderDescription>
</comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails> ---------------------
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders
预期XML XSLT 转换后:
<?xml version="1.0" encoding="WINDOWS-1252"?>
-<SalesOrders xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
-<Orders>
-<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
-<OrderDetails>
-<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<Comment>Nil</Comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails> ---------------------
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
-<OrderDetails>
-<StockLine>
<StockCode>Nil</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders
以上代码分为 6 个不同的行项目(即针对每个 OrderLineID),因此,我们试图在评论字段上实现子字符串。
如何为换行符处的注释子串编写XSLT转换文件?
提前致谢!
为了将问题最小化为此处的主要问题,请考虑以下样式表:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="OrderDetails">
<xsl:copy>
<xsl:variable name="stockcode" select="StockLine/StockCode" />
<xsl:for-each select="tokenize(StockLine/Comment, '\n')">
<StockLine>
<xsl:copy-of select="$stockcode"/>
<Comment>
<xsl:value-of select="normalize-space(.)"/>
</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于以下输入:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS\n C3 Generic\n LOC 0833\n Expected arrival 01/07/2016\n OTYPE NE\n TRKPC 01 GM/00007643020008361321</Comment>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>Expected arrival 01/07/2016</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>???</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
我不知道 OrderLineID
的内容应该来自哪里。
重要提示:
如果输入 Comment
包含实际换行符 - IOW,如果您的实际输入是:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>NIL</StockCode>
<Comment>EDIORDER-SAVE COMMENTS
C3 Generic
LOC 0833
Expected arrival 01/07/2016
OTYPE NE
TRKPC 01 GM/00007643020008361321</Comment>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
然后使用:
<xsl:for-each select="tokenize(StockLine/Comment, '\n')">
已添加:
给定以下输入:
XML
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<OrderDescription>EDIORDER-SAVE COMMENTS
C3 Generic
LOC 0833
Expected arrival 01/07/2016
OTYPE NE
TRKPC 01 GM/00007643020008361321</OrderDescription>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>
以下样式表:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="StockLine">
<xsl:variable name="i" select="position()" />
<xsl:copy>
<xsl:copy-of select="StockCode"/>
<Comment>
<xsl:value-of select="normalize-space(tokenize(../StockLine[1]/OrderDescription, '\n')[$i])"/>
</Comment>
<xsl:copy-of select="OrderLineID"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
将return:
结果
<?xml version="1.0" encoding="UTF-8"?>
<SalesOrders xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
xsd:noNamespaceSchemaLocation="SORTOIDOC.XSD">
<Orders>
<OrderHeader>
<Customer>000016</Customer>
<OrderDate>2016-04-19</OrderDate>
<SalesForceOrderNumber>ORD-411324</SalesForceOrderNumber>
</OrderHeader>
<OrderDetails>
<StockLine>
<StockCode>ABB-CDE-FGH-01</StockCode>
<Comment>EDIORDER-SAVE COMMENTS</Comment>
<OrderLineID>OR-1561179</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>C3 Generic</Comment>
<OrderLineID>OR-1561180</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>LOC 0833</Comment>
<OrderLineID>OR-1561181</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>Expected arrival 01/07/2016</Comment>
<OrderLineID>OR-1561182</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>OTYPE NE</Comment>
<OrderLineID>OR-1561183</OrderLineID>
</StockLine>
<StockLine>
<StockCode>Nil</StockCode>
<Comment>TRKPC 01 GM/00007643020008361321</Comment>
<OrderLineID>OR-1561184</OrderLineID>
</StockLine>
</OrderDetails>
</Orders>
</SalesOrders>