【发布时间】:2020-02-11 13:40:56
【问题描述】:
<cac:InvoiceLine xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">4</cbc:ID>
<cbc:InvoicedQuantity xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" unitCode="KWH">10825.00000000</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">405.94</cbc:LineExtensionAmount>
<cac:InvoicePeriod>
<cbc:StartDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-01-01</cbc:StartDate>
<cbc:EndDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-01-08</cbc:EndDate>
</cac:InvoicePeriod>
<cac:Item>
<cbc:Description xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Opslag duurzame energie (schijf 2)</cbc:Description>
<cbc:Name xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Opslag duurzame energie (schijf 2)</cbc:Name>
<cac:CommodityClassification>
<cbc:ItemClassificationcode xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" listID="ZZZ">83101800</cbc:ItemClassificationcode>
</cac:CommodityClassification>
<cac:ClassifiedTaxCategory>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">S</cbc:ID>
<cbc:Percent xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">0.0375000</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">5</cbc:ID>
<cbc:InvoicedQuantity xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" unitCode="ANN">-0.02185792</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">-9.52</cbc:LineExtensionAmount>
<cac:InvoicePeriod>
<cbc:StartDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-01-01</cbc:StartDate>
<cbc:EndDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-01-08</cbc:EndDate>
</cac:InvoicePeriod>
<cac:Item>
<cbc:Description xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Netbeheerkosten</cbc:Description>
<cbc:Name xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Netbeheerkosten</cbc:Name>
<cac:CommodityClassification>
<cbc:ItemClassificationcode xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" listID="ZZZ">83101800</cbc:ItemClassificationcode>
</cac:CommodityClassification>
<cac:ClassifiedTaxCategory>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">S</cbc:ID>
<cbc:Percent xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">435.6800000</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">1</cbc:ID>
<cbc:InvoicedQuantity xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" unitCode="MON">0.25810000</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">0.00</cbc:LineExtensionAmount>
<cac:InvoicePeriod>
<cbc:StartDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-01-01</cbc:StartDate>
<cbc:EndDate xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2020-02-08</cbc:EndDate>
</cac:InvoicePeriod>
<cac:Item>
<cbc:Description xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Termijnbedrag Elektriciteit</cbc:Description>
<cbc:Name xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">Termijnbedrag Elektriciteit</cbc:Name>
<cac:CommodityClassification>
<cbc:ItemClassificationcode xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" listID="ZZZ">83101800</cbc:ItemClassificationcode>
</cac:CommodityClassification>
<cac:ClassifiedTaxCategory>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">S</cbc:ID>
<cbc:Percent xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" currencyID="EUR">0.0000000</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</ubl:Invoice>
您可以在上面找到我得到的一段 XML。我想要以下内容:如果 ItemClassificationCode 是 83101800 并且 Item/Description 是“Termijnbedrag Elektriciteit”,那么“Elektra1” Elseif ItemClassificationCode 是 83101800 并且 Item/Description 是“Netbeheerkosten” 然后“Net1” Elseif ItemClassificationCode 是 83101800 然后“Elektra” Else “”
我尝试了以下方法:
<xsl:template match="/">
<xsl:for-each select="/*[local-name()='InvoiceLine']">
<xsl:if test="*[local-name()='Item']/*[local-name()='CommodityClassification']/*[local-name()='ItemClassificationcode']='83101800'">Elektra</xsl:if>
<xsl:if test="*[local-name()='Item']/*[local-name()='CommodityClassification']/*[local-name()='ItemClassificationcode']='83101800' and *[local-name()='Item']/*[local-name()='Description']='Netbeheerkosten'">Net1</xsl:if>
<xsl:if test="*[local-name()='Item']/*[local-name()='CommodityClassification']/*[local-name()='ItemClassificationcode']='83101800' and *[local-name()='Item']/*[local-name()='Description']='Termijnbedrag Elektriciteit'">Elektra1</xsl:if>
</xsl:for-each>
</xsl:template>
然而,上面的代码只是让我得到了一切的结果。所以 ElektraNet1Elektra1 但我只想要 Net1 或 Elektra 1 如果 InvoiceLine 的两个变量都取决于它。因此,如果 itemcode 是 83101800 并且描述说 Netbeheerkosten 那么它应该是 Net1 和 Net1 而已..
有人可以帮帮我吗?我也用 xsl:otherwhise when 等尝试过。但我似乎没有让它工作。
【问题讨论】:
-
使用xsl:choose。 --附言使用前缀而不是
*[local-name()='...']hack。 -
你能帮我解决这个问题吗?我对 xsl 很陌生(+/- 1 年)。
-
不,因为您的 XML 不完整并且您没有显示预期的结果。请参阅:minimal reproducible example.
-
预期结果应该是(在这种情况下):Elektra(第 1 行)Net1(第 2 行)和 Elektra1(第 3 行)