2012-02-23 2 views
4

I持つXML文書にロードされ、次の文字列:XmlDocument.SelectSingleNodeと接頭辞+ xmlNamespace問題

<?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はnullです:S正しい方法は何ですか? 私が使用し、//メッセージを私はそのタイプではない、このノードへの特定のパスの任意のノードを取得したいbecouse ... XML文書内の

+0

タイトルに「c#」などのプレフィックスを付けないでください。それがタグのためのものです。 –

答えて

7

ax29プレフィックスは、"http://exception.do29.imq.es/xsd"名前空間に"http://services.do29.imq.es"にないように設定されています。我々はresulが含まれているかわからないが、私はそれがxmldocuが含まれている推測しているので、私たちのために伝えるのは難しい

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

あなたはそれを釘付けにしてくれてありがとう...(たくさんの名前空間と私は誤解されていた...) – VSP

0

はこれを試してみてください?

ドキュメントから他の要素を取得しようとしましたか?

なし XmlNode nodemsg = xmldocu.SelectSingleNode( "detail // ax29:message");何か収穫?

+0

申し訳ありませんが、それは誤植でした – VSP