2012-11-14 134 views
0

當我做出一個web服務功能的電話,我得到這個響應XML:轉換XML缺少命名空間

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope> 
    <soap:Body> 
    <Response> 
     <Result> 
     <Status>Success</Status> 
     <Text>Some text</Text> 
     </Result> 
    </Response> 
</soap:Body> 
</soap:Envelope> 

正如你所看到的,響應XML不包括肥皂命名空間。

我想通過去除皁東西轉換XML,雖然我正在XSL轉換我得到這個加肥皂命名空間來響應這樣的XML工作:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <Response> 
     <Result> 
     <Status>Success</Status> 
     <Text>Some text</Text> 
     </Result> 
    </Response> 
</soap:Body> 
</soap:Envelope> 

如何如果soap命名空間不包含在響應xml中,我可以進行此轉換嗎?

回答

0

這就是我所說的格式不正確的XML。無論您嘗試如何轉換它,任何明智的XSLT解析器都會給出「Unbound Prefix」錯誤的一些變體。由於源文檔對其命名空間的使用情況「感到困惑」,因此任何後續的XSLT也會混淆。

Namespaces in XML 1.1

命名空間約束:前綴聲明

命名空間前綴,除非是XML或XMLNS,一定是要麼開始在命名空間聲明屬性聲明 - 使用前綴的元素的標籤 或者祖先元素 (即,其內容中具有前綴標記的元素)。 此外,最裏面的聲明 中的屬性值不能是空字符串。

恐怕您將不得不聯繫誰發佈此Web服務,並讓他們將其響應格式更改爲正確的XML。

1

該輸入格式良好,但沒有名稱空間良好的XML。您可以使用被配置爲不識別名稱空間,然後使用XSLT結構,如

<xsl:template match="*[local-name() = 'soap:Envelope']"> 

一個分析器,它解析爲DOM樹,但是否可行,如果是究竟你該怎麼辦這取決於您使用的XSLT處理器,如果不知道這一點,我無法給出更詳細的答案。