微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python的xml.etree getiterator等效于C#

我有这个XML文件http://dl.dropbox.com/u/10773282/2011/perf.xml

它具有两个标记的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

如何使用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);
}

解决方法:

您应该尝试Linq to XML …非常易于使用:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。