C# ASP.NET 我解析xml失敗錯誤的原因 xmlns names pace

最近學寫網頁要跟別人拿資料,上網看個範例好像挺簡單的

我要拿書的名稱,以下是一個簡單的例子,對方會回傳給我這樣的XML資料。

 
<?xml version=\"1.0\" encoding=\"utf - 8\"?>
<bookname>人蔘的故事</bookname>

 

宣告完後,用Load就會把xml資料讀進xmlDoc裡了

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("www.aaa112233.com/getbookname"); 

簡單兩行就結束了!

 

如果你自己練習時xml檔案是放在自己電腦上,那也可以使用Load讀入,例如這樣

xmlDoc.Load("C:\使用者\長庚\桌面\book.xml"); 

 

或是把xml字串寫在string上面,也可以讀,不過記得字串中的分號要加上\符號,才不會讀錯

string bookxml = "<?xml version=\"1.0\" encoding=\"utf - 8\"?>"
                 +"<bookname>人蔘的故事</bookname>";
xmlDoc.Load(bookxml); 

 

接下來,因為資料只有一筆,所以就用SelectSingleNode把xmlDoc裡面名字叫bookname的節點抓出來
然後再用InnerText把節點裡面的文字抓出來,就得到書的名稱  人蔘的故事

XmlNode aNode = xmlDoc.SelectSingleNode("bookname");
string name = aNode.InnerText;

 

如果資料有很多筆,例如這樣

 
<?xml version=\"1.0\" encoding=\"utf - 8\"?&gt;
<bookname>人蔘的故事第1集</bookname>
<bookname>人蔘的故事第2集</bookname>
<bookname>人蔘的故事第3集</bookname>

 

那就用SelectNodes讀出來,把資料傳給nodelist後,用foreach 迴圈抓出來

XmlNodeList nodelist = xmlDoc.SelectNodes("bookname"); 
foreach (XmlNode oneNode in nodelist)
{
 string bookname = oneNode.InnerText;
} 

結果糟糕的事情發生了,對方給我的資料是像以下這樣

 
<?xml version=\"1.0\" encoding=\"utf - 8\"?>
<bookname xmlns="DataToOut">人蔘的故事</bookname>

多了xmlns標籤,select就會自動忽視它,所以害我找不到……
所以程式碼要改寫成這樣,把xmlns裡面的DataToOut取一個名字叫abc,並把搜尋改成這樣就可以了

XmlNamespaceManager mr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("abc", "DataToOut");

XmlNode aNode = xmlDoc.SelectSingleNode("//abc:bookname", mr);
Facebook留言板