2012-04-05 1 views
7

Мне нужно прочитать XML-имя «name» из следующего XML, но я не знаю, как это сделать.Как я могу найти определенный узел в моем XML?

Вот XML:

<?xml version="1.0" standalone="yes" ?> 
    <games> 
    <game> 
     <name>Google Pacman</name> 
     <url>http:\\www.google.de</url> 
    </game> 
    </games> 

Код:

using System.Xml; 

namespace SRCDSGUI 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(Application.StartupPath + @"\games.xml"); 


      XmlElement root = doc.DocumentElement; 
      XmlNodeList nodes = root.SelectNodes("//games"); 

      foreach (XmlNode node in nodes) 
      { 
       listBox1.Items.Add(node["game"].InnerText); 
      } 


     } 
    } 
} 
+0

Если вам нужно прочитать только содержимое узла «имя», сделайте XPath прямо ссылкой на текст этих узлов: '/ games/game/name/text()'. –

ответ

9

Может попробовать этот

XmlNodeList nodes = root.SelectNodes("//games/game") 
foreach (XmlNode node in nodes) 
{ 
    listBox1.Items.Add(node["name"].InnerText); 
} 
2

Вы действительно близко - вы нашли узел игры, почему бы не вы делаете шаг дальше и просто получаете узел имени, если он существует как ребенок под игрой?

в ваших для каждого цикла:

listBox1.Items.Add(node.SelectSingleNode("game/name").InnerText); 
0
import xml.etree.ElementTree as ET 

tree= ET.parse('name.xml') 
root= tree.getroot() 

print root[0][0].text 
  • корень = игры
  • корень [0] = игра
  • корень [0] [0] = имя
  • корень [0] [1] = url
  • используйте «.text», чтобы получить строковое представление значения
  • этот пример использует Python
0

Вот пример простой функции, которая находит и извлекает два конкретных узлов из файла XML и возвращает их в виде массива строк

private static string[] ReadSettings(string settingsFile) 
    { 
     string[] a = new string[2]; 
     try 
     { 
      XmlTextReader xmlReader = new XmlTextReader(settingsFile); 
      while (xmlReader.Read()) 
      { 
       switch (xmlReader.Name) 
       { 
        case "system": 
         break; 
        case "login": 
         a[0] = xmlReader.ReadString(); 
         break; 
        case "password": 
         a[1] = xmlReader.ReadString(); 
         break; 
       } 

      }  
      return a; 
     } 
     catch (Exception ex) 
     { 
      return a; 
     } 
    } 
0

Или попробуйте это:

XmlNodeList nodes = root.GetElementsByTagName("name"); 
for(int i=0; i<nodes.Count; i++) 
{ 
listBox1.Items.Add(nodes[i].InnerXml); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^