2016-09-23 154 views
0

我有一个输入xml其中S:故障xmlns:ns4 =“http://www.w3.org/2003/05/soap-envelope”这给从故障节点提取数据带来问题。 。命名空间问题

<?xml version="1.0" encoding="UTF-8"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"> 
      <faultcode>S:Server</faultcode> 
      <faultstring>The GTIN is not valid or the system can not map the Company Prefix to an existing Company Prefix from the Setting</faultstring> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 

XLST代码是不工作...

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="example" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns4="http://www.w3.org/2003/05/soap-envelope" 
exclude-result-prefixes="S ns4"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/S:Envelope"> 
      <ns0:MT_CreateSerialNumberResponse_IB xmlns:ns0="example"> 
      <serialNumberList xmlns="urn:abcd:1"> 
       <body> 
        <message> 
         <xsl:value-of select="S:Body/ns4:Fault/ns4:faultstring"/> 
        </message> 
       </body> 
      </serialNumberList> 
     </ns0:MT_CreateSerialNumberResponse_IB> 
    </xsl:template> 
</xsl:stylesheet> 

预期的结果...请帮助发现代码错误,如果我错过了什么

<ns0:MT_CreateSerialNumberResponse_IB xmlns:ns0="example"> 
    <serialNumberList xmlns="urn:abcd:1"> 
     <body><message>The GTIN is not valid or the system can not map the Company Prefix to an existing Company Prefix from the Setting</message> 
     </body> 
    </serialNumberList> 
</ns0:MT_CreateSerialNumberResponse_IB> 

回答

1

试试这个

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="example" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns4="http://www.w3.org/2003/05/soap-envelope" 
exclude-result-prefixes="S ns4"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/S:Envelope"> 
      <ns0:MT_CreateSerialNumberResponse_IB xmlns:ns0="example"> 
      <serialNumberList xmlns="urn:abcd:1"> 
       <body> 
        <message> 
         <xsl:value-of select="S:Body/S:Fault/faultstring"/> 
        </message> 
       </body> 
      </serialNumberList> 
     </ns0:MT_CreateSerialNumberResponse_IB> 
    </xsl:template> 
</xsl:stylesheet> 
+0

没有为XSLT验证一个免费的在线工具:HTTP:// xslttest。 appspot.com/ – Naidu

1
  1. 有一个在XML输入其名称的前缀没有节点通过ns4:。这使得名称空间声明xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"完全是多余的(在XML和XSLT中)。

  2. 只有默认名称空间声明(无前缀)被继承。 faultstring元素没有前缀,并且没有默认的名称空间声明。这意味着它是没有命名空间,它的路径(从S:Envelope上下文)是:

    S:Body/S:Fault/faultstring