XSLT 需要为重复节点中的相同元素添加值
XSLT Need to add value to same element in repeating nodes
我正在尝试创建 XSLT 以将 10 添加到下面的每个 Quantity 元素
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>90</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>120</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2400</Quantity>
</JournalLine>
</Lines>
预期结果:-
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>100</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>130</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2410</Quantity>
</JournalLine>
</Lines>
到目前为止,我所做的一切都导致在所有节点中重复相同的值,感谢任何帮助。
编辑:
我正在使用 XSLT-2.0,这是我目前的 XSLT 代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Quantity/text()">
<xsl:value-of select = "format-number(//Quantity, '###,###.00')"/>
</xsl:template>
<xsl:template match="Filename"></xsl:template>
</xsl:stylesheet>
您可以使用此 XSLT-1.0/2.0 代码来实现您的目标:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="JournalLine/Quantity">
<xsl:copy>
<xsl:value-of select="format-number(.+10, '###,###.00')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它的输出是:
<?xml version="1.0" encoding="utf-8"?>
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>100.00</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>130.00</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2,410.00</Quantity>
</JournalLine>
</Lines>
此输出将数字格式化为您在问题中指定的小数点。
我正在尝试创建 XSLT 以将 10 添加到下面的每个 Quantity 元素
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>90</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>120</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2400</Quantity>
</JournalLine>
</Lines>
预期结果:-
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>100</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>130</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2410</Quantity>
</JournalLine>
</Lines>
到目前为止,我所做的一切都导致在所有节点中重复相同的值,感谢任何帮助。
编辑:
我正在使用 XSLT-2.0,这是我目前的 XSLT 代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Quantity/text()">
<xsl:value-of select = "format-number(//Quantity, '###,###.00')"/>
</xsl:template>
<xsl:template match="Filename"></xsl:template>
</xsl:stylesheet>
您可以使用此 XSLT-1.0/2.0 代码来实现您的目标:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="no" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="JournalLine/Quantity">
<xsl:copy>
<xsl:value-of select="format-number(.+10, '###,###.00')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它的输出是:
<?xml version="1.0" encoding="utf-8"?>
<Lines>
<JournalLine>
<ItemCode>40006061</ItemCode>
<Quantity>100.00</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40006031</ItemCode>
<Quantity>130.00</Quantity>
</JournalLine>
<JournalLine>
<ItemCode>40008331</ItemCode>
<Quantity>2,410.00</Quantity>
</JournalLine>
</Lines>
此输出将数字格式化为您在问题中指定的小数点。