Getiterator xml.etree Python, эквивалентный C # - PullRequest
1 голос
/ 15 февраля 2011

У меня есть этот XML-файл: http://dl.dropbox.com/u/10773282/2011/perf.xml

enter image description here

Он имеет два элемента Class, как отмечено.Мне нужно получить два узла с C #.

С Python я могу легко получить их с помощью etree.ElementTree следующим образом.

from xml.etree import ElementTree as et
from xml.etree.ElementTree import Element

tree = et.parse("perf.xml")
tss = tree.getiterator('Class')

for elem in tss:
    tss_name =  elem.find('ClassKeyName')
    print tss_name.text

>> helloclass.exe
>> helloclass.exeFpga::TestMe

enter image description here

Как можноЯ делаю то же самое с C #?

решено

using System;
using System.Xml;
using System.Xml.Linq;
using System.Linq;

namespace HIR {
  class Dummy {

    static void Main(String[] argv) {

        XDocument doc = XDocument.Load("perf.xml");
        var res = from p in doc.Root.Elements("Module").Elements("NamespaceTable").Elements("Class").Elements("ClassKeyName")  select p.Value;

        foreach (var val in res) {
            Console.WriteLine(val.ToString());
        }
    }
  }
}

>> helloclass.exe
>> helloclass.exeFpga::TestMe

или

foreach (var elem in elems) {
    var res = elem.Elements("ClassKeyName").ToList();
    Console.WriteLine(res[0].Value);
}

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

Вы должны попробовать Linq to XML ... Довольно прост в использовании:

var xml = XDocument.Load(filename);
var res = from p in xml.Root.Elements("Class").Elements("ClassKeyName") select p.Value;
0 голосов
/ 15 февраля 2011

Попробуйте:

using System.Xml;
// ...
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filename);
var matches = xmlDoc.SelectNodes("//Class/ClassKeyName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...