将元素转换为属性
Transform element to atribute
我想使用 xslt 将 xml 文件中一个元素的值设置为另一个元素的属性,但我不知道该怎么做。
我的输入 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2021-10-05T00:52:16">
<Invoice>
<ID>123</ID>
<IssueDate>2011-09-22</IssueDate>
<DueDate>2021-09-22</DueDate>
<InvoiceTypeCode>380</InvoiceTypeCode>
...
<InvoiceLine>
<ID>2</ID>
<InvoicedQuantity>1.0000</InvoicedQuantity>
<unitCode>kg</unitCode>
<LineExtensionAmount>12.0000</LineExtensionAmount>
<TaxTotal>
<TaxAmount>1.2000</TaxAmount>
<IDfakture>2</IDfakture>
</TaxTotal>
<Item>
<Description>artikal 2</Description>
<Name>2</Name>
</Item>
<Price>
<PriceAmount>15.0000</PriceAmount>
<AllowanceCharge>
<ChargeIndicator>1</ChargeIndicator>
<MultiplierFactorNumeric>20.0000</MultiplierFactorNumeric>
<Amount>3.0000</Amount>
</AllowanceCharge>
</Price>
</InvoiceLine>
</Invoice>
</dataroot>
我正在使用 xslt 并希望元素 unitCode 的值成为元素
的属性
InvoicedQuantity 然后删除元素 unitCode
输出xml我需要:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2021-10-05T00:52:16">
<Invoice>
<ID>123</ID>
<IssueDate>2011-09-22</IssueDate>
<DueDate>2021-09-22</DueDate>
<InvoiceTypeCode>380</InvoiceTypeCode>
...
<InvoiceLine>
<ID>2</ID>
<InvoicedQuantity unitCode="kg">1.0000</InvoicedQuantity>
<LineExtensionAmount>12.0000</LineExtensionAmount>
<TaxTotal>
<TaxAmount>1.2000</TaxAmount>
<IDfakture>2</IDfakture>
</TaxTotal>
<Item>
<Description>artikal 2</Description>
<Name>2</Name>
</Item>
<Price>
<PriceAmount>15.0000</PriceAmount>
<AllowanceCharge>
<ChargeIndicator>1</ChargeIndicator>
<MultiplierFactorNumeric>20.0000</MultiplierFactorNumeric>
<Amount>3.0000</Amount>
</AllowanceCharge>
</Price>
</InvoiceLine>
</Invoice>
</dataroot>
请帮忙。
您可以将这两个模板与身份模板结合使用(只需要 XSLT-1.0):
<xsl:template match="InvoicedQuantity">
<xsl:copy>
<xsl:attribute name="unitCode"><xsl:value-of select="following-sibling::unitCode[1]" /></xsl:attribute>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="unitCode" />
他们删除了所有 <unitCode>
元素,但如果每个元素前面都有一个 <InvoicedQuantity>
元素,代码应该可以按预期工作。
复制所有不匹配元素的 XSLT-1.0 身份模板 是:
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
我想使用 xslt 将 xml 文件中一个元素的值设置为另一个元素的属性,但我不知道该怎么做。 我的输入 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2021-10-05T00:52:16">
<Invoice>
<ID>123</ID>
<IssueDate>2011-09-22</IssueDate>
<DueDate>2021-09-22</DueDate>
<InvoiceTypeCode>380</InvoiceTypeCode>
...
<InvoiceLine>
<ID>2</ID>
<InvoicedQuantity>1.0000</InvoicedQuantity>
<unitCode>kg</unitCode>
<LineExtensionAmount>12.0000</LineExtensionAmount>
<TaxTotal>
<TaxAmount>1.2000</TaxAmount>
<IDfakture>2</IDfakture>
</TaxTotal>
<Item>
<Description>artikal 2</Description>
<Name>2</Name>
</Item>
<Price>
<PriceAmount>15.0000</PriceAmount>
<AllowanceCharge>
<ChargeIndicator>1</ChargeIndicator>
<MultiplierFactorNumeric>20.0000</MultiplierFactorNumeric>
<Amount>3.0000</Amount>
</AllowanceCharge>
</Price>
</InvoiceLine>
</Invoice>
</dataroot>
我正在使用 xslt 并希望元素 unitCode 的值成为元素
的属性
InvoicedQuantity 然后删除元素 unitCode
输出xml我需要:
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2021-10-05T00:52:16">
<Invoice>
<ID>123</ID>
<IssueDate>2011-09-22</IssueDate>
<DueDate>2021-09-22</DueDate>
<InvoiceTypeCode>380</InvoiceTypeCode>
...
<InvoiceLine>
<ID>2</ID>
<InvoicedQuantity unitCode="kg">1.0000</InvoicedQuantity>
<LineExtensionAmount>12.0000</LineExtensionAmount>
<TaxTotal>
<TaxAmount>1.2000</TaxAmount>
<IDfakture>2</IDfakture>
</TaxTotal>
<Item>
<Description>artikal 2</Description>
<Name>2</Name>
</Item>
<Price>
<PriceAmount>15.0000</PriceAmount>
<AllowanceCharge>
<ChargeIndicator>1</ChargeIndicator>
<MultiplierFactorNumeric>20.0000</MultiplierFactorNumeric>
<Amount>3.0000</Amount>
</AllowanceCharge>
</Price>
</InvoiceLine>
</Invoice>
</dataroot>
请帮忙。
您可以将这两个模板与身份模板结合使用(只需要 XSLT-1.0):
<xsl:template match="InvoicedQuantity">
<xsl:copy>
<xsl:attribute name="unitCode"><xsl:value-of select="following-sibling::unitCode[1]" /></xsl:attribute>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="unitCode" />
他们删除了所有 <unitCode>
元素,但如果每个元素前面都有一个 <InvoicedQuantity>
元素,代码应该可以按预期工作。
复制所有不匹配元素的 XSLT-1.0 身份模板 是:
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>