2013-04-06 48 views
-1

我有這個基本的SOAP響應:XSLT和SOAP命名空間:如何添加

<?xml version="1.0" encoding="WINDOWS-1252" standalone="yes"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body xmlns="http://www.xxx.com/dotnet/types/" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <a> 
      <b> 
        <c> 
        c-value 
        </c> 
         b-value 
      </b> 
       a-value 
     </a> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

,我想輸出的C節點只值:C-值。

我不明白爲什麼這個XSL是不工作:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
> 
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/> 
<xsl:template match="/"> 
<xsl:value-of select="//c"/> 
</xsl:template> 
</xsl:stylesheet> 

看來,問題出在名字空間在<SOAP-ENV:Body xmlns="http://www.xxx.com/dotnet/types/" 如果我刪除它,它的工作原理。

我想我應該改變xpath在select="//c"或者在xls中添加需要的命名空間,但是我不能把它弄清楚!

+1

的可能重複[如何從XML與XSLT命名空間 '選擇'?](http://stackoverflow.com/questions/284094/how-to -select-from-xml-with-namespaces-with-xslt) – 2013-04-06 16:40:55

+0

的確的確......經過數小時的搜索和試用後,這些鏈接在編寫問題時出現,這就是爲什麼我將它包含在我的答案中。這是一樣的情況,但適用於SOAP,很容易忽略它。但我同意,這是重複的 – Glasnhost 2013-04-07 09:34:39

回答

1

OK,這個環節是有幫助的:How to 'select' from XML with namespaces?

我說像這樣的命名空間:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xxx="http://www.xxx.com/dotnet/types/" 
> 
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/> 
<xsl:template match="/"> 
<xsl:value-of select="//xxx:c"/> 
</xsl:template> 
</xsl:stylesheet> 

首先的xmlns:XXX被添加到XLST,然後變成的XPath // XXX:C 。

寫作問題的SO,解決了問題...