У меня есть XML-файл следующим образом:
Я загрузил файл XML: http://dl.dropbox.com/u/10773282/2011/result.xml. Это сгенерированный компьютером XML, поэтому вам может понадобиться просмотрщик / редактор XML.
Я использую этот код 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
Я ожидаю получить
hello.exe
61440
...
Однако я получаю только одну строку длинной строки.
- Q1: Что может быть не так?
- Q2: Как получить количество элементов в минусах? Я пытался
cons.Count
, но это не работает.
Q3: если мне нужно получить вложенное значение <CoverageDSPriv><Module><ModuleNmae>
, я использую этот код:
var coverPriv = doc.Descendants ("CoverageDSPriv"); //.Первый();
var cons = coverPriv.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 может быть лучшим решением, как этот пост .