我有一個來自計算機診斷會話的相當大的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匹配.. –