使用XSL提取XML多名称空间

时间:2018-02-17 21:18:54

标签: xslt extract

我有这个带命名空间的XML,我需要提取段“NewDataSet” 我有一个xsl代码,但它不起作用

<NewDataSet> <RowNum>
				<MATNR>10000101</MATNR>
					<AUFNR>731200000047</AUFNR>
				</RowNum>
			<RowNum>
					<MATNR>45000528</MATNR>
					<AUFNR>731200000047</AUFNR>
				</RowNum>
			</NewDataSet>
<!-- Need To Extract -->

我需要像这个段一样提取NewDataSet。

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" />

    <xsl:template match="//NewDataSet">
            <xsl:copy-of select="."/>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

我有这段代码,但回报并不像预期的那样。

<?xml version="1.0" encoding="UTF-8"?>
<RowNum xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        diffgr:id="RowNum1"
        msdata:rowOrder="0">
					<MATNR>10000101</MATNR>
					<AUFNR>731200000047</AUFNR>
					<MENGE>385</MENGE>
					<MEINS>G</MEINS>
				</RowNum>
<RowNum xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
        xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        diffgr:id="RowNum2"
        msdata:rowOrder="1">
					<MATNR>45000528</MATNR>
					<AUFNR>731200000047</AUFNR>
					<MENGE>540</MENGE>
					<MEINS>KG</MEINS>
				</RowNum>

当我运行上面的XSL时,我得到了这个XML。 我将拥有没有命名空间的段

return_sequences

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

在XSLT 2.0中,使用<xsl:copy-of select="XXXX" copy-namespaces='no'/>

在XSLT 1.0中,您需要使用身份模板的变体,使用<xsl:element name="{local-name()}" namespace="namespace-uri()"/>复制元素。

请不要在没有说明您正在使用哪个版本的情况下询问XSLT问题,因为使用XSLT 2.0或3.0可以轻松实现许多问题!