2016-11-30 106 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測試xml元素來讀取並獲取XML值。使用foreach獲取所有子節點值

我想是這樣的:

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

您的XPath不選擇<test/>元素,但<tests/>父元素。

嘗試

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

不要混用直XML(XmlDocument的)使用XML LINQ(的XDocument)。試試這個

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

他不是混合XML和LINQ2XML。他只在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; 
      } 
     }