I have an XML file as follows:

I uploaded the XML file : http://dl.dropbox.com/u/10773282/2011/result.xml . It’s a machine generated XML, so you might need some XML viewer/editor.
I use this C# code to get the elements in 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);
}
}
}
}
Running the code, I get this result.
hello.exe6144008016161810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018AA
I expect to get
hello.exe
61440
...
However, I get just one line of long string.
- Q1 : What might be wrong?
- Q2 : How to get the # of elements in cons? I tried
cons.Count, but it doesn’t work. -
Q3 : If I need to get nested value of
<CoverageDSPriv><Module><ModuleNmae>I use this code :var coveragePriv = doc.Descendants(“CoverageDSPriv”); //.First();
var cons = coveragePriv.Elements(“Module”).Elements(“ModuleName”);
I can live with this, but if the elements are deeply nested, I might be wanting to have direct way to get the elements. Are there any other ways to do that?
ADDED
var cons = coveragePriv.Elements("Module").Elements();
solves this issue, but for the NamespaceTable, it again prints out all the elements in one line.
hello.exe
61440
0
8
0
1
6
1
61810hello.exehello.exehello.exe81061hello.exehello.exe!17main_main40030170170010180180011190190012200200013hello.exe!107testfunctiontestfunction(int)40131505001460600158080216120120017140140018
Or, Linq to XML can be a better solution, as this post.
It looks to me like you only have one element named
Module— so.Valueis simply returning you the InnerText of that entire element. Were you intending this instead?This would return all the child elements of the
Moduleelement, which seems to be what your’e after.Update:
<NamespaceTable>is a child of<Module>but you appear to want to handle it similarly to<Module>in that you want to write out each child element. Thus, one brute-force approach would be to add another loop for<NamespaceTable>:Alternatively, perhaps you’d rather just denormalize them altogether via
.Descendents():