2016-05-10 3 views
-1

Ich habe versucht, wie folgt, aber sie arbeiten nicht mit NullReferenceException. Es schien einfach, aber einige Lösungen mit LINQ sehen kompliziert aus, weil ich nicht mit LINQ und XML-Parsing vertraut bin.C# XML) Wie erhalten Sie Werte innerhalb bestimmter Tags?

Ich möchte nur Werte wie B1, B2, B3 und C1, C2 ..... innerhalb R1. (Es ist auch R2, R3..so auf.)

Was ich versucht habe, sind

,
string greenvalue = objDoc.Descendants("R1").First().Element("B1").Value.ToString(); 

und

string bluevalue = objDoc.XPathSelectElement("//ITEM[R1]").Element("B1").Value.ToString(); 

XML-Code ist wie unten,

-<RESULT> 
    -<ITEM> 
     -<R1> 
     -<B DESC="product"> 
      <B1> chocolate </B1> 
      <B2> white </B2> 
      <B3> Kisses </B3> 
      <B4> bar type </B4> 
      <B5> 2 $ </B5> 
      <B6>2014-09-26 </B6> 
      <B7>201404418 </B7> 
      </B> 
     -<C DESC="ingredient"> 
      -<CR1> 
       <C1>cacao paste </C1> 
       <C2> concentrated </C2> 
       <C3> 21.69 </C3> 
       <C4> gram </C4> 
      </CR1> 
     </C> 

Antwort

1

Ihre versuchten Codes haben nicht funktioniert, da <B1> kein direktes Kind von <R1> ist. Es gibt <B> Element zwischen denen Sie berücksichtigen müssen.

"Ich will nur Werte wie B1, B2, B3 und C1, C2 ..... innerhalb R1"

Dies ist eine mögliche Art und Weise:

string bluevalue = (string)objDoc.XPathSelectElement("//R1/B/B1"); 

oder das entsprechende LINQ ohne XPath:

string greenvalue = (string)objDoc.Descendants("R1") 
            .Elements("B") 
            .Elements("B1") 
            .FirstOrDefault(); 
+0

Oh..Danke so viel! Der erste funktioniert gut. Ich habe Paare Stunden probiert, aber ich konnte mit meinem Fall keinen passenden finden. Danke für Ihr exzellentes Wissen und Ihre Unterstützung! –

+0

Gern geschehen! So eine nette Antwort :) – har07

+0

Kannst du mir bitte nur ein bisschen mehr helfen ..? Ich muss auch den C1-Wert erhalten, aber (string) objDoc.XPathSelectElement ("// R1/C/CR1/C1"). funktioniert nicht..mit NullReferenceException..Ich bin wirklich nicht vertraut mit XML-Struktur und depressiv..Bitte geben Sie mir bitte noch einmal .. –

1

Das erste, was Sie brauchen do ist das Parsen der XML-Datei in C# mithilfe der XmlDocument-Klasse. Dann können Sie die XML-Tags einzeln beziehen.

XmlDocument doc = new XmlDocument(); // load document 
doc.Load(Path); 
XmlNodeList nodeList = doc.GetElementsByTagName("R1") 

Dann können Sie auf die Knoten und Werte in R1 zugreifen.

nodeList[i].ParentNode.Name 
nodeList[i].ChildNodes[x].InnerText 
nodeList[i].ChildNodes[x].Attributes["Id"].Value 
+0

Ich weiß, wie XDocument zu laden ist und ich weiß Ihr exzellentes Wissen und Ihre Unterstützung zu schätzen. Jedoch hat eine andere Person früher eine richtige Antwort gegeben. Vielen Dank ! –

Verwandte Themen