Я новичок в XSLT. Я хочу, чтобы скопировать все предыдущие узлы одного конкретного узла, я попытался с копией и предшествующая, но выход не то, что я ожидал ..Как использовать xslt копию предыдущих узлов?
Исходный пример XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<MetaData>
<Owner>adad</Owner>
<date>2013-1-12</date>
</MetaData>
<Orders>
<Order name="123">
<OrderName>Order1</OrderName>
<OrderNo>1</OrderNo>
</Order>
<Order name="1234">
<OrderName>Order2</OrderName>
<OrderNo>2</OrderNo>
</Order>
<Order>
<OrderName>Order3</OrderName>
<OrderNo>3</OrderNo>
</Order>
</Orders>
<tail>1111</tail>
</root>
XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match = "Orders" name="split">
<xsl:for-each select="Order">
<xsl:if test="position() = 2">
<xsl:copy-of select="preceding::node()"/>
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
выход:
<?xml version="1.0" encoding="UTF-8"?>
adad
2013-1-12
<MetaData>
<Owner>adad</Owner>
<date>2013-1-12</date>
</MetaData>
<Owner>adad</Owner>adad
<date>2013-1-12</date>2013-1-12
<Order name="123">
<OrderName>Order1</OrderName>
<OrderNo>1</OrderNo>
</Order>
<OrderName>Order1</OrderName>Order1
<OrderNo>1</OrderNo>1
<Order name="1234">
<OrderName>Order2</OrderName>
<OrderNo>2</OrderNo>
</Order>
1111
ожидаемый XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<MetaData>
<Owner>adad</Owner>
<date>2013-1-12</date>
</MetaData>
<Orders>
<Order name="123">
<OrderName>Order1</OrderName>
<OrderNo>1</OrderNo>
</Order>
<Order name="1234">
<OrderName>Order2</OrderName>
<OrderNo>2</OrderNo>
</Order>
<Orders>
</root>
выглядит как Потомок <MetaData>
и <Order>
копируются три раза .. и почему <tail>
узла потерял имя элемента?
Может ли кто-нибудь помочь мне с этим? Спасибо
Можно ли показать свой ожидаемый результат в этом вопросе? Благодаря! –
@TimC Отредактировано, спасибо за ваш отзыв – alvan