根据输入中元素的出现增加输出中的元素值
Increment the element value in output based on the occurrence of an element in input
你好,我正在尝试编写 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>
试试这个:
<?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>
看到转换
你好,我正在尝试编写 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>
试试这个:
<?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>
看到转换