给定XML

时间:2018-05-03 10:23:12

标签: xml xslt

XML命名空间正在为我创建一个问题,我无法选择任何值。我相信这种情况正在发生,因为有些标签有命名空间,有些则没有。

你能帮我创建一个XSLT来获得所需的输出吗?

示例输入 -

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns3:NotificationResponse xmlns:ns3="http://www.test.com/ns/wsdl/test-V2_4" xmlns="http://www.test.com/ns/xsd/test-V2_1" xmlns:ns2="http://www.test.com/ns/xsd/test-V2_2">
         <Header>
            <appCode />
            <isRemNot>false</isRemNot>
            <identification>Test</identification>
            <msgDT>2018-05-01T16:29:12.937+02:00</msgDT>
         </Header>
         <Contract />
         <Notification>
            <ns2:notificationTypeCode>TestTypeCode</ns2:notificationTypeCode>
         </Notification>
      </ns3:NotificationResponse>
   </soap:Body>
</soap:Envelope>

示例输出 -

<Contract>
            <isRemNot>false</isRemNot>
        <identification>Test</identification>
        <msgDT>2018-05-01T16:29:12.937+02:00</msgDT>
            <notificationTypeCode>TestTypeCode</notificationTypeCode>
<Contract>

1 个答案:

答案 0 :(得分:0)

某些标记具有名称空间,或者某些标记不具有名称空间。 - 没有前缀为名称空间前缀的输入XML元素与名称空间xmlns="http://www.test.com/ns/xsd/test-V2_1"相关联。为了获取数据,您必须映射XSLT中的所有命名空间并相应地访问元素。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns3="http://www.test.com/ns/wsdl/test-V2_4"
    xmlns:ns1="http://www.test.com/ns/xsd/test-V2_1"
    xmlns:ns2="http://www.test.com/ns/xsd/test-V2_2" 
    exclude-result-prefixes="soap ns1 ns2 ns3">

如果您不需要输出XML中的命名空间,则可以使用exclude-result-prefixes属性。

在这种情况下,已使用XSL中的前缀"http://www.test.com/ns/xsd/test-V2_1"和元素viz识别名称空间ns1<Header><isRemNot>等访问权限为<ns1:Header><ns1:isRemNot>,依此类推。

以下是您可以使用的模板。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns3="http://www.test.com/ns/wsdl/test-V2_4"
    xmlns:ns1="http://www.test.com/ns/xsd/test-V2_1"
    xmlns:ns2="http://www.test.com/ns/xsd/test-V2_2" 
    exclude-result-prefixes="soap ns1 ns2 ns3">
    <xsl:output method="xml" />
    <xsl:strip-space elements="*" />

    <xsl:template match="ns3:NotificationResponse">
        <Contract>
            <isRemNot><xsl:value-of select="ns1:Header/ns1:isRemNot" /></isRemNot>
            <identification><xsl:value-of select="ns1:Header/ns1:identification" /></identification>
            <msgDT><xsl:value-of select="ns1:Header/ns1:msgDT" /></msgDT>
            <notificationTypeCode><xsl:value-of select="ns1:Notification/ns2:notificationTypeCode" /></notificationTypeCode>
        </Contract>
    </xsl:template>
</xsl:stylesheet>

输出

<Contract>
    <isRemNot>false</isRemNot>
    <identification>Test</identification>
    <msgDT>2018-05-01T16:29:12.937+02:00</msgDT>
    <notificationTypeCode>TestTypeCode</notificationTypeCode>
</Contract>