我有一个XML文件如下所示:
我上传了这个XML文件:http://dl.dropbox.com/u/10773282/2011/result.xml。它是机器生成的XML,因此您可能需要一些XML查看器/编辑器。
我使用以下C#代码获取
运行代码后,我得到了这个结果。
![XML文件](https://istack.dev59.com/kxiuN.webp)
我使用以下C#代码获取
CoverageDSPriv/Module/*
中的元素。using System;
using System.Xml;
using System.Xml.Linq;
namespace HIR {
class Dummy {
static void Main(String[] argv) {
XDocument doc = XDocument.Load("result.xml");
var coveragePriv = doc.Descendants("CoverageDSPriv"); //.First();
var cons = coveragePriv.Elements("Module");
foreach (var con in cons)
{
var id = con.Value;
Console.WriteLine(id);
}
}
}
}
运行代码后,我得到了这个结果。
hello.exe6144008016161810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018AA
I expect to get
hello.exe
61440
...
然而,我只得到了一行很长的字符串。
- Q1:可能出了什么问题?
- Q2:如何获取cons中元素的数量?我尝试使用
cons.Count
,但它不起作用。 Q3:如果我需要获取
<CoverageDSPriv><Module><ModuleNmae>
的嵌套值,我使用以下代码:var coveragePriv = doc.Descendants("CoverageDSPriv"); //.First(); var cons = coveragePriv.Elements("Module").Elements("ModuleName");
我可以接受这种方式,但如果元素被深度嵌套,我可能希望有直接获取元素的方法。还有其他方法吗?
添加
var cons = coveragePriv.Elements("Module").Elements();
解决了这个问题,但对于NamespaceTable
,它仍然将所有元素一起打印在一行上。
hello.exe
61440
0
8
0
1
6
1
61810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018
或者,Linq to XML可以作为更好的解决方案,如这篇帖子所述。