If you want to use LINQ to locate XML nodes by their names and your XML contains namespace notations, be aware to specify namespaces looking for descendants.
XML Example:
<?xml version="1.0" encoding="utf-8"?>     
<MyDataStruct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">     
  <DataRoot xmlns="http://mydata.org/2011/1">     
    <Dispatch xmlns="http://mydata.org/2011/1">     
      <Target>     
        <Organisation>     
          <Comment></Comment>     
          <ID></ID>     
        </Organisation>     
        <System>     
          <ID>100</ID>     
          <Comment></Comment>     
        </System>     
      </Target>     
      <Source>     
        <Organisation>     
          <Comment></Comment>     
          <ID></ID>     
        </Organisation>     
        <System>     
          <ID>101</ID>     
          <Comment></Comment>     
        </System>     
      </Source>     
    </Dispatch>     
  </DataRoot>     
</MyDataStruct>
LINQ based recursive search operations:
XDocument xDoc = XDocument.Load(xmlFileName);
XElement xe1 = xDoc.Descendants("{http://mydata.org/2011/1}Target").First(); // locate first “Target” node    
   XElement xe1 = xDoc.Descendants("{http://mydata.org/2011/1}Source").First()    
                                  .Descendants("{http://mydata.org/2011/1}ID").First(); // locate “ID” subnode of“Source” node
UPDATE: seen also here -
http://stackoverflow.com/questions/566167/query-an-xdocument-for-elements-by-name-at-any-depth
Enjoy!
 
 
No comments:
Post a Comment