XmlNodeList (why is it empty)

I do not understand why this NodeList is empty.

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

Here is 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 Final Script, I want to get an array string that contains every attribute in it.

Thanks. Stephen

+5
source share
3 answers

Marc_s's answer is actually correct. You should pay attention to the XML namespaces. However, his sample code will not work directly for your example. Here is the full sample that works with the XML you gave (although I had to clear it ... it was missing the closing tag for attributes).

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

XML. skimming " XML" .

+3

XML (xmlns="http://nts-de-osm1-pxc/webservices/") !

, - .

:

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);

+8

Try:

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

0
source

All Articles