如何使用XSLT 1.0将XML复杂类型元素转换为单个元素以进行XML转换

问题描述 投票:0回答:1

我下面有一个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>

我遇到的问题是输出正在使用第一个可用的Supplier_Reference / ID。我想输出类型为“ Supplier_ID”的Supplier_Reference / ID。如何在XSLT文档中引用此复杂类型?

xml xslt-1.0
1个回答
0
投票

更改:

© www.soinside.com 2019 - 2024. All rights reserved.