Frage

Ich kann nicht verstehen, warum dieser NodeList ist leer

XmlDocument document = new XmlDocument();
document.Load(xmlpath);    
XmlNodeList nodes = document.SelectNodes("/StructureResponse/rootItem/attributes/Attribute");

Hier ist die XMLFILE

<?xml version="1.0" encoding="utf-8"?>
<StructureResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://nts-de-osm1-pxc/webservices/">
    <consolidatedItems xsi:nil="true" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/" />
    <rootItem xsi:type="Part" xmlns="http://systinet.com/wsdl/com/osm/webservices/service/">
        <attributes>
            <Attribute>
                <dataDictionary xsi:nil="true" />
                <dataType>string</dataType>
                <displayName>IDENT_NR</displayName>
                <key>true</key><name>IDENT_NR</name>
                <searchable>true</searchable>
                <userAttribute>true</userAttribute>
                <value>9662744</value>
            </Attribute>
            <Attribute>
                <dataDictionary xsi:nil="true" />
                <dataType>string</dataType>
                <displayName>AI</displayName>
                <key>true</key><name>AI</name>
                <searchable>true</searchable>
                <userAttribute>true</userAttribute>
                <value>00</value>
            </Attribute>
        </rootItem>
    </StructureResponse>

In der Schluss Script Ich möchte ein Array String erhalten, die jedes Attribut in es enthält.

Danke Stefan

War es hilfreich?

Lösung

User marc_s Antwort ist eigentlich richtig. Sie müssen die Aufmerksamkeit auf die XML-Namespaces zahlen. Sein Codebeispiel wird jedoch nicht direkt für Ihr Beispiel arbeiten. Hier ist ein Beispiel anzeigen, dass die Arbeiten mit dem XML Sie gab (obwohl ich es zu reinigen hatte bis ... es wurde ein End-Tag für attributes fehlt).

string xmlData = 
@"<?xml version='1.0' encoding='utf-8'?>
  <StructureResponse
     xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
     xmlns:xsd='http://www.w3.org/2001/XMLSchema'
     xmlns='http://nts-de-osm1-pxc/webservices/'>
    <consolidatedItems xsi:nil='true' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/' />
    <rootItem xsi:type='Part' xmlns='http://systinet.com/wsdl/com/osm/webservices/service/'>
      <attributes>
        <Attribute>
          <dataDictionary xsi:nil='true' />
          <dataType>string</dataType>
          <displayName>IDENT_NR</displayName>
          <key>true</key>
          <name>IDENT_NR</name>
          <searchable>true</searchable>
          <userAttribute>true</userAttribute>
          <value>9662744</value>
        </Attribute>
        <Attribute>
          <dataDictionary xsi:nil='true' />
          <dataType>string</dataType>
          <displayName>AI</displayName>
          <key>true</key>
          <name>AI</name>
          <searchable>true</searchable>
          <userAttribute>true</userAttribute>
          <value>00</value>
        </Attribute>
      </attributes>
      </rootItem>
  </StructureResponse>";

XmlDocument document = new XmlDocument();
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(document.NameTable);
namespaceManager.AddNamespace("a", "http://nts-de-osm1-pxc/webservices/");
namespaceManager.AddNamespace("b", "http://systinet.com/wsdl/com/osm/webservices/service/");
document.LoadXml(xmlData);
XmlNodeList nodes = document.SelectNodes("/a:StructureResponse/b:rootItem/b:attributes/b:Attribute", namespaceManager);
// 'nodes' contains 2 items now, as expected

Ich schlage vor, ein bisschen mehr zu tun von XML-Namen studieren. Versuchen Sie Skimming Ronald Bourret der "XML-Namespaces FAQ" .

Andere Tipps

Sie sind nicht unter Berücksichtigung des XML-Namespace (xmlns="http://nts-de-osm1-pxc/webservices/") auf dem Dokument!

OK, Sie sogar zwei separate Namensräume haben -. Aktualisiert meine Probe

Versuchen Sie diese:

XmlDocument document = new XmlDocument();
document.Load(xmlpath);    

XmlNamespaceManager mgr = new XmlNamespaceManager(document.NameTable);
mgr.AddNamespace("ns", "http://nts-de-osm1-pxc/webservices/"); 
mgr.AddNamespace("root", "http://systinet.com/wsdl/com/osm/webservices/service/");

XmlNodeList nodes = document.SelectNodes("/ns:StructureResponse/root:rootItem/root:attributes/root:Attribute", mgr);

Marc

Versuchen Sie:

XmlNodeList nodes = document.SelectNodes("./StructureResponse/rootItem/attributes");

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top