5

次の文字列を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はnullです:Sそれを行う正しい方法は何ですか?このノードへの特定のパスではなく、そのタイプのノードを取得したいので、//messageを使用しました...

4

2 に答える 2

8

ax29XMLドキュメントのプレフィックスは、"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);
于 2012-02-23T11:05:54.407 に答える
0

resulに何が含まれているのかわからないのでわかりにくいですが、xmldocuが含まれていると思いますか?

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

XmlNode nodemsg = xmldocu.SelectSingleNode( "detail // ax29:message");を実行します。何かをもたらす?

于 2012-02-23T11:14:28.233 に答える