2014-10-29 133 views
0

我想用C#讀取XML文件,但我總是遇到錯誤。無法使用C#和XmlDocument讀取XML

這是我的XML

<?xml version="1.0" encoding="ISO-8859-1"?> 
<OMDS xmlns="urn:omds20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:omds20 ./omds26-00.xsd"> 
    <PAKET VUNr="014" PaketZpktErstell="2014-08-29T10:45:08.575" PaketZpktLetztErstell="2014-08-29T10:45:08.575" PaketInhCd="VM" PaketUmfCd="G" VUVersion="26-00" DVRNrAbs="0"> 
     <PERSON .... 
     <PERSON .... 
     <PERSON .... 

我想讀這個XML,但XMLContentNodes始終爲空。所以我無法獲得SelectSingleNode這個路徑,但我無法找出什麼應該是錯誤的?

XmlDocument doc = new XmlDocument(); 
doc.Load(openFileDialog1.FileName); 

XmlNode XMLContentNodes = doc.SelectSingleNode("/OMDS/PAKET"); // Error Here 
XmlNodeList PersonNodeList = XMLContentNodes.SelectNodes("PERSON"); 
foreach (XmlNode node in PersonNodeList) 
{ 
    ..... 

任何幫助將不勝感激。

+0

驗證與外部驗證你的XML,以確保沒有數據問題」 – Sebas 2014-10-29 15:06:13

+0

嘗試:VAR lst = doc.Descendants(「PAKET」); – Mate 2014-10-29 15:09:25

回答

3

通常的命名空間問題。嘗試

XmlNamespaceManager mgr = new XmlNamespaceManager(new NameTable()); 
mgr.AddNamespace("d", "urn:omds20"); 
XmlNode XMLContentNodes = doc.SelectSingleNode("/d:OMDS/d:PAKET", mgr); 
XmlNodeList PersonNodeList = XMLContentNodes.SelectNodes("d:PERSON", mgr); 
+0

非常感謝! – derdida 2014-10-29 19:08:15

1

你需要的命名空間甕添加:加載你的XML文件中之後omds20doc的XmlDocument對象。它看起來像下面這樣:

XmlDocument doc = new XmlDocument(); 
doc.Load(openFileDialog1.FileName); 

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(doc.NameTable); 
xmlnsManager.AddNamespace("omds20", "urn:omds20"); 

然後你就可以查詢這樣的PAKET節點:

XmlNode paketNode = doc.SelectSingleNode("/omds20:OMDS/omds20:PAKET", xmlnsManager); 
+0

非常感謝! – derdida 2014-10-29 19:08:57