[英]How do I convert an XML complextype element to individual element for XML transormation using XSLT 1.0
我在下面有一个 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<Response_Data>
<Purchase_Order>
<Purchase_Order_Data>
<Purchase_Order_ID>PURCHASE_ORDER-6-1</Purchase_Order_ID>
<Locked_in_Workday>0</Locked_in_Workday>
<Document_Number>PO-1000292</Document_Number>
<Supplier_Reference Descriptor="Cardinal Health">
<ID type="WID">777d89f438960138f522dd70ce00d3ae</ID>
<ID type="Supplier_Reference_ID">SH199</ID>
<ID type="Supplier_ID">S-1725</ID>
</Supplier_Reference>
<Document_Date>2020-03-30</Document_Date>
<Acknowledgement_Expected>0</Acknowledgement_Expected>
<Auto_Sourced>0</Auto_Sourced>
<Tax_Amount>0</Tax_Amount>
<Freight_Amount>0</Freight_Amount>
<Other_Charges>0</Other_Charges>
</Purchase_Order_Data>
</Purchase_Order>
<Purchase_Order>
<Purchase_Order_Data>
<Purchase_Order_ID>PURCHASE_ORDER-6-2</Purchase_Order_ID>
<Locked_in_Workday>0</Locked_in_Workday>
<Document_Number>PO-1000293</Document_Number>
<Supplier_Reference Descriptor="Medtronic Inc">
<ID type="WID">777d89f43896016d93c653c1ce0035f9</ID>
<ID type="Supplier_Reference_ID">SH36</ID>
<ID type="Supplier_ID">S-2935</ID>
</Supplier_Reference>
<Document_Date>2020-03-30</Document_Date>
<Acknowledgement_Expected>0</Acknowledgement_Expected>
<Auto_Sourced>0</Auto_Sourced>
<Tax_Amount>0</Tax_Amount>
<Freight_Amount>0</Freight_Amount>
<Other_Charges>0</Other_Charges>
</Purchase_Order_Data>
</Purchase_Order>
</Response_Data>
我想将其转换为:
<?xml version="1.0" encoding="UTF-8"?>
<Response_Data>
<Purchase_Order>
<Purchase_Order_Data>
<Purchase_Order_ID>PURCHASE_ORDER-6-1</Purchase_Order_ID>
<Locked_in_Workday>0</Locked_in_Workday>
<Document_Number>PO-1000292</Document_Number>
<Supplier_Reference>
<Supplier_Name>Cardinal Health</Supplier_Name>
<Supplier_ID>S-1725</Supplier_ID>
</Supplier_Reference>
<Document_Date>2020-03-30</Document_Date>
<Acknowledgement_Expected>0</Acknowledgement_Expected>
<Auto_Sourced>0</Auto_Sourced>
<Tax_Amount>0</Tax_Amount>
<Freight_Amount>0</Freight_Amount>
<Other_Charges>0</Other_Charges>
</Purchase_Order_Data>
</Purchase_Order>
<Purchase_Order>
<Purchase_Order_Data>
<Purchase_Order_ID>PURCHASE_ORDER-6-2</Purchase_Order_ID>
<Locked_in_Workday>0</Locked_in_Workday>
<Document_Number>PO-1000293</Document_Number>
<Supplier_Reference>
<Supplier_Name>Medtronic Inc</Supplier_Name>
<Supplier_ID>S-2935</Supplier_ID>
</Supplier_Reference>
<Document_Date>2020-03-30</Document_Date>
<Acknowledgement_Expected>0</Acknowledgement_Expected>
<Auto_Sourced>0</Auto_Sourced>
<Tax_Amount>0</Tax_Amount>
<Freight_Amount>0</Freight_Amount>
<Other_Charges>0</Other_Charges>
</Purchase_Order_Data>
</Purchase_Order>
</Response_Data>
以下是我正在使用的XSLT。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Supplier_Reference">
<Supplier_Reference>
<Purchase_Order_ID><xsl:value-of select="../Purchase_Order_ID"/></Purchase_Order_ID>
<Supplier_ID><xsl:value-of select="ID"/></Supplier_ID>
<Supplier_Name><xsl:value-of select="../Supplier_Reference/attribute::Descriptor"/>
</Supplier_Name>
</Supplier_Reference>
</xsl:template>
</xsl:stylesheet>
我遇到的问题是 output 正在使用第一个可用的 Supplier_Reference/ID。 我想 output 类型为“Supplier_ID”的 Supplier_Reference/ID。 如何在 XSLT 文档中引用这种复杂类型?
改变:
<xsl:value-of select="ID"/>
至:
<xsl:value-of select="ID[@type='Supplier_ID']"/>
请注意,您的第一个模板是多余的; 内置的模板规则已经做到了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.