Старый ввод xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SalesOrder>
<SalesOrderHeader>
<OrderNumber>
<BuyerOrderNumber>3016</BuyerOrderNumber>
</OrderNumber>
</SalesOrderHeader>
<SalesOrderDetail>
<ListOfItemDetail>
<ItemDetail>
<BaseItemDetail>
<LineItemNum>
<BuyerLineItemNum>00001</BuyerLineItemNum>
</LineItemNum>
</BaseItemDetail>
</ItemDetail>
<ItemDetail>
<BaseItemDetail>
<LineItemNum>
<BuyerLineItemNum>00002</BuyerLineItemNum>
</LineItemNum>
</BaseItemDetail>
</ItemDetail>
</ListOfItemDetail>
</SalesOrderDetail>
</SalesOrder>
Старый код:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/SalesOrder">
<ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions" >
<SHEADER>
<xsl:call-template name="sHeader"/>
</SHEADER>
<SITEM>
<xsl:call-template name="sItem"/>
</SITEM>
</ns0:Z_SALES_ORDER>
</xsl:template>
<xsl:template name="sHeader">
<SNUMBER>
<xsl:value-of select="SalesOrderHeader/OrderNumber/BuyerOrderNumber "/>
</SNUMBER>
</xsl:template>
<xsl:template name="sItem">
<xsl:for-each select="descendant::ItemDetail">
<item>
<B_ITEM>
<xsl:value-of select="BaseItemDetail/LineItemNum/BuyerLineItemNum"/>
</B_ITEM>
</item>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Требуемый вывод:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Z_SALES_ORDER xmlns:ns0="urn:sap-com:document:sap:rfc:functions">
<SHEADER>
<SNUMBER>3016</SNUMBER>
</SHEADER>
<SITEM>
<item>
<B_ITEM>00001</B_ITEM>
</item>
<item>
<B_ITEM>00002</B_ITEM>
</item>
</SITEM>
</ns0:Z_SALES_ORDER>
Запрос: теперь есть некоторые изменения в исходном xml. В SalesOrder
rootnode они также передают другую информацию. Входной файл ниже.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SalesOrder xmlns="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
<SalesOrderHeader>
<OrderNumber>
<BuyerOrderNumber>3016</BuyerOrderNumber>
</OrderNumber>
</SalesOrderHeader>
<SalesOrderDetail>
<ListOfItemDetail>
<ItemDetail>
<BaseItemDetail>
<LineItemNum>
<BuyerLineItemNum>00001</BuyerLineItemNum>
</LineItemNum>
</BaseItemDetail>
</ItemDetail>
<ItemDetail>
<BaseItemDetail>
<LineItemNum>
<BuyerLineItemNum>00002</BuyerLineItemNum>
</LineItemNum>
</BaseItemDetail>
</ItemDetail>
</ListOfItemDetail>
</SalesOrderDetail>
</SalesOrder>
Не могли бы вы сказать мне, как получить тот же вывод, который я получал, используя старый входной XML-файл.
EDIT
Запрос: В корневом узле SalesOrder они также передают другую информацию. Входной файл ниже. Как получить информацию о корневом узле с помощью XSLT?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SalesOrder xmlns="abc:org.xcbl:schemas/xcbl/v4/xcbl4.xsd" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding">
<SalesOrderHeader>
<OrderNumber>
<BuyerOrderNumber>3016</BuyerOrderNumber>
</OrderNumber>
</SalesOrderHeader>
</SalesOrder>