2016-05-27 6 views
3

Hallo Ich hoffe jemand kann mir helfen, ich habe mir den Kopf gebrochen um bestimmten Text in einer XML Datei zu bekommen, aber bisher erfolglos. Ich habe viel recherchiert und keine der Sachen, die im Internet gefunden werden können, war bisher hilfreich.Wie bekomme ich XML-Attribute in Elementen in C#

Ich versuche, eine exportierte XML-Datei zu lesen, die von einer Drittanbieteranwendung generiert wird. Jetzt frage ich mich, ob das XML nach den richtigen XML-Regeln eingerichtet ist? Ich habe das folgende Stück XML:

<?xml version="1.0" encoding="utf-8"?> 
<Document> 
    <DocumentInfo> 
     <Created>2016-05-23T13:19:41.0528572Z</Created> 
     <ExportSetting>None</ExportSetting> 
     <InstalledProducts> 
      <Product> 
       <DisplayName>Some display name</DisplayName> 
       <DisplayVersion>Some display version</DisplayVersion> 
      </Product> 
      <OptionPackage> 
       <DisplayName>Some display name</DisplayName> 
       <DisplayVersion>Some display version</DisplayVersion> 
      </OptionPackage> 
      <Product> 
       <DisplayName>Some display name</DisplayName> 
       <DisplayVersion>Some display version</DisplayVersion> 
      </Product> 
      <OptionPackage> 
       <DisplayName>Some display name</DisplayName> 
       <DisplayVersion>Some display version</DisplayVersion> 
      </OptionPackage> 
      <Product> 
       <DisplayName>Some display name</DisplayName> 
       <DisplayVersion>Some display version</DisplayVersion> 
      </Product> 
     </InstalledProducts> 
    </DocumentInfo> 
    <Some.Block ID="0"> 
    <AttributeList> 
    <Interface> 
    <Sections xmlns="http://www.somenamespace.com"> 
     <Section Name="Input"> 
     <Member Name="Member name 1" Datatype="Bool" /> 
     <Member Name="Member name 2" Datatype="Int" /> 
     <Member Name="Member name 3" Datatype="Int" /> 
     </Section> 

Um die Anzeigenamen Elemente usw. zu bekommen, ist kein Problem, da diese normale XML-Code scheint, aber der zweite Teil ist ziemlich schwierig.

Ich möchte nur die Werte der Memberattribute 'Name' und 'Datatype' des Abschnitts mit dem Attributnamen 'Input' extrahieren.

Ich habe versucht, so viele Dinge mit xmlpath, getNodebytagname etc. etc.

versucht, dieses:

xmlnode = doc.GetElementsByTagName("Sections"); 
for (i = 0; i <= xmlnode.Count - 1; i++) 
{ 
    xmlnode[i].ChildNodes.Item(0).InnerText.Trim(); 
    str = xmlnode[i].ChildNodes.Item(0).InnerText.Trim() + " " + xmlnode[i].ChildNodes.Item(1).InnerText.Trim() + " " + xmlnode[i].ChildNodes.Item(2).InnerText.Trim(); 
    MessageBox.Show(str); 
} 

und versucht, dies:

//XmlNodeList elemList = doc.GetElementsByTagName("Section[@Name='Input']"); 
//for (int x = 0; x < elemList.Count; x++) 
//{ 
// string attrVal = elemList[x].Attributes["Interface"].Value; 
//} 

Bisher nichts funktionierte und der Code scheint nicht über den Teil mit dem Namensraum hinauszukommen. Hat jemand eine Idee?

+0

xmlnode <Name, Datatype> Format haben [i] .ChildNodes.Item (0) .attribute ("attribute_name") Wert – JaggenSWE

Antwort

2

wird dies tun:

XmlNodeList nodes = doc.GetElementsByTagName("Section"); 

Dictionary<string, string> list = new Dictionary<string, string>(); 
foreach (XmlNode node in nodes) 
{ 
    if (node.Attributes != null && node.Attributes["Name"] != null && node.Attributes["Name"].Value == "Input") 
    { 
     foreach (XmlNode childNode in node.ChildNodes) 
     { 
      if (childNode.Attributes != null) 
       list.Add(childNode.Attributes["Name"].Value, childNode.Attributes["Datatype"].Value); 
     } 
    } 
} 

Sie werden ein Wörterbuch in der

+0

In. Ihre erste 'if'-Bedingung, Sie müssen testen, ob' node.Attributes ["Name"]! = null ', weil 'node.Attributes' niemals null ist ... – Thomas

+0

@Thomasa Danke, dass Sie das herausgebracht haben. Es ist jetzt behoben. – Nasreddine

Verwandte Themen