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>
答案 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>