У меня есть довольно большой XML-файл с сеанса компьютерной диагностики, и моя цель - захватить данные результатов тестирования и вставить его в PDF-файл для клиента. У меня очень мало опыта работы с XML, и это становится огромной проблемой.Получение дочерних узлов в XML с пользовательским пространством имен
Вот образец документа:
<pcd:DiagLog xmlns="http://www.pc-doctor.com/2004/8/diagLogger"
xmlns:pcd="http://www.pc-doctor.com/2004/8/diagLogger"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.pc-doctor.com/2004/8/diagLogger
http://www.pc-doctor.com/2004/8/diagLogger/diagLogger.xsd">
<Application>
<version>6.0.6818.10</version>
<Start>
<Time hour="04" minute="14" second="01" millisecond="34" month="10" day="15" year="2016" utcOffset="-480">2016-10-15T04:14:01.034-08:00</Time>
</Start>
<OS>Windows 10 Service Pack 0 PE x86 32-bit</OS>
</Application>
.......
<DiagInfo>
....
<TestResult EnglishResult="PASS">
....
</TestResult>
</DiagInfo>
Есть тысячи строк между </Application>
и <DiagInfo>
, но я заинтересован только с информацией, находящейся в <DiagInfo>
и <TestResult>
.
Я думал, что я мог бы захватить Узлы просто:
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("pcd", "http://www.pc-doctor.com/2004/8/diagLogger");
XmlNodeList xnList = doc.SelectNodes("/pcd:DiagLog/DiagInfo", manager);
Но это возвращает пустой список. Когда я ссылаюсь на Namespace Manager or XsltContext needed, появляется Я делаю это правильно, но я не думаю, что я правильно понимаю пространство имен. Когда я изменяю Корневой элемент только: <Diagnostics></Diagnostics>
вместо <pcd:DiagLog>
, и попробуйте: doc.SelectNodes("/Diagnostics/DiagInfo", manager);
список моих узлов заселен.
Может ли кто-нибудь увидеть, где я навожу пространство имен?
@Tomalak это ошибка при копировании/вставке. Я проверил код и соответствие URI .. –