最近學寫網頁要跟別人拿資料,上網看個範例好像挺簡單的
我要拿書的名稱,以下是一個簡單的例子,對方會回傳給我這樣的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\"?> <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留言板