2016-11-30 7 views
1
<R> 
<tests> 
<test language="en"> hello </test> 
<test language="it"> ciao </test> 
<test language="hu"> szia </test> 
<test language="es"> ola </test> 
</tests> 
</R> 

上記のXMLの部分は(XML)ファイルに含まれています。 foreach test xml要素でXML値を読み取り、取得する必要があります。foreachを使用してすべての子ノードの値を取得

私はこのような何か試してみました:あなたのXPathは<test/>要素が、<tests/>親要素を選択しない

XDocument xdoc = XDocument.Load(theXmlURLpath); 

    foreach (var iDescription in xdoc.XPathSelectElements("R/tests")) 
    { 
     string lang = iDescription.Attribute("language").Value; // en/it/hu/es 
     string text= iDescription.Value; // hello or ciao ... 
     switch(iLang) 
     { 
      case "en": 
      // do something 
      break; 
      case "it": 
      // do something 
      break; 
      case "hu": 
      // do something 
      break; 
      case "es": 
      // do something 
      break; 
     } 
} 

答えて

3

を。

は、XML LINQ(XDocument)とストレートXML(XmlDocumentオブジェクト)を混在させないでください

xdoc.XPathSelectElements("R/tests/test") 
0

を試してみてください。彼はXMLとLINQ2XMLを混合されていないこの

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication29 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      XDocument xdoc = XDocument.Load(FILENAME); 

       foreach (var iDescription in xdoc.Descendants("test")) 
       { 
        string lang = (string)iDescription.Attribute("language"); // en/it/hu/es 
        string text= (string)iDescription; // hello or ciao ... 
        switch(lang) 
        { 
          case "en": 
          // do something 
          break; 
          case "it": 
          // do something 
          break; 
          case "hu": 
          // do something 
          break; 
          case "es": 
          // do something 
          break; 
        } 
       } 

     } 

    } 

} 
+0

を試してみてください。彼は排他的にXDocumentで作業しています。 – Sefe

0
 var xdoc = XDocument.Load(theXmlURLpath); 

     var testElements = xdoc.Root.Element("tests").Elements("test"); 

     foreach (var testElement in testElements) 
     { 
      var lang = testElement.Attribute("language").Value; // en/it/hu/es 
      var text = testElement.Value; // hello or ciao ... 
      switch (lang) 
      { 
       case "nl": 
        // do something 
        break; 
       case "d": 
        // do something 
        break; 
       case "gb": 
        // do something 
        break; 
       case "fr": 
        // do something 
        break; 
       case "esp": 
        // do something 
        break; 
       case "it": 
        // do something 
        break; 
      } 
     } 
関連する問題