您好我正在尝试编写xslt,当给出下面的类似输入时,我需要获得所需的输出。如果您观察到输出具有基于该xml中元素出现的id。到目前为止,在我的xslt中,我根据位置做了这件事。但它打破并重新启动输入XML中的每一个计数。这可以实现吗。
更新
在输入中添加更多细节。如你所见,我在水平下添加,应该填充所有相应的数据
输入XML
<lines>
<line>
<po-num>text1</ponum>
<accountings>
<accounting>
<account>
<seg1>value1</seg1>
</account>
</accounting>
<accounting>
<account>
<seg1>value2</seg1>
</account>
</accounting>
</accountings>
</line>
<line>
<po-num>text2</ponum>
<accountings>
<accounting>
<account>
<seg1>value3</seg1>
</account>
</accounting>
</accountings>
</line>
<line>
<po-num>text3</ponum>
<account>
<seg1>value4</seg1>
</account>
</line>
</lines>
所需的输出XML
<Item>
<id>1</id>
<po-num>text1</ponum>
<seg>value1</seg>
</Item>
<Item>
<id>2</id>
<po-num>text1</ponum>
<seg>value2</seg>
</Item>
<Item>
<id>3</id>
<po-num>text2</ponum>
<seg>value3</seg>
</Item>
<Item>
<id>4</id>
<po-num>text3</ponum>
<seg>value4</seg>
</Item>
XSLT 我正在使用Rupesh提供的xslt。
<?xml version="2.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"></xsl:output>
<xsl:template match = "/">
<xsl:for-each select="//account">
<item>
<id><xsl:value-of select="position()"/></id>
<po-num><xsl:value-of select="../../../*:po-num"/></po-num>
<seg><xsl:value-of select="./*:seg1"></xsl:value-of></seg>
</item>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:3)
试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"></xsl:output>
<xsl:template match = "/">
<xsl:for-each select="//seg1">
<item>
<id><xsl:value-of select="position()"/></id>
<seg><xsl:value-of select="."></xsl:value-of></seg>
</item>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
看到转型