2012-02-23 115 views
4

我裝到一個XML文檔以下字符串:XmlDocument.SelectSingleNode和前綴+ XML命名空間的問題

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <soapenv:Fault> 
     <faultcode>soapenv:Server</faultcode> 
     <faultstring>El cliente con los parámetros introducidos no existe./faultstring> 
     <detail> 
      <ns:ClienteWSDo29Exception xmlns:ns="http://services.do29.imq.es"> 
       <Do29Exception xmlns="http://services.do29.imq.es" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax211="http://model.do29.imq.es/xsd" xmlns:ax213="http://dto.do29.imq.es/xsd" xmlns:ax29="http://exception.do29.imq.es/xsd" xsi:type="ax29:Do29Exception"> 
        <ax29:classname>class es.imq.do29.dao.ClienteDaoImpl</ax29:classname> 
        <ax29:trace xsi:nil="true" /> 
        <ax29:previous xsi:nil="true" /> 
        <ax29:method>getCliente</ax29:method> 
        <ax29:id>1</ax29:id> 
        <ax29:message>El cliente con los parámetros introducidos no existe.</ax29:message> 
       </Do29Exception> 
      </ns:ClienteWSDo29Exception> 
     </detail> 
     </soapenv:Fault> 
    </soapenv:Body> 
</soapenv:Envelope> 

然後按照與XML命名空間的情況下我想:

XmlDocument xmldocu = new XmlDocument(); 
xmldocu.LoadXml(xml); 
XmlNamespaceManager namespaces = new XmlNamespaceManager(xmldocu.NameTable); 
namespaces.AddNamespace("ax29", "http://services.do29.imq.es"); 
XmlNode nodemsgx = xmldocu.SelectSingleNode("//message", namespaces); 
XmlNode nodemsg = xmldocu.SelectSingleNode("//ax29:message", namespaces); 

但nodemsgx和nodemsg爲空:S什麼是正確的方法來做到這一點? 我用//消息becouse我想這種類型不是特定的路徑,這個節點的任何節點...

+0

請不要用「c#」等來標題。這就是標籤的用途。 – 2012-02-23 14:04:05

回答

7

的XML文檔中的ax29前綴設置爲"http://exception.do29.imq.es/xsd"命名空間,而不是"http://services.do29.imq.es"

試試這個:

namespaces.AddNamespace("ax29", "http://exception.do29.imq.es/xsd"); 
XmlNode nodemsg = xmldocu.SelectSingleNode("//ax29:message", namespaces); 
+0

謝謝你釘了它...(有太多的命名空間,我被誤導了......) – VSP 2012-02-23 11:24:49

0

很難告訴我們,因爲我們不知道什麼resul包含,但我猜它包含xmldocu?

您是否嘗試過從文檔中獲取其他元素?

確實 XmlNode nodemsg = xmldocu.SelectSingleNode(「detail // ax29:message」);產生什麼?

+0

對不起,這是一個錯字:S – VSP 2012-02-23 11:20:59