今天在MSDN論壇看到有篇「xml讀不到結點」,直覺想說應該是取得到呀!

XML內容我簡化如下,

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Folder>
<name>TWN_TOWN_1</name>
 <Placemark>
    <name>10021008</name>
    <description></description>
  </Placemark>
  <Placemark>
    <name>10021009</name>
    <description></description>
  </Placemark>
</Folder></Document></kml>

修改超人衝衝衝附的範例程式改成取所有Placemark節點,果然是取不到任何節點!

Dim doc As New XmlDocument()
doc.Load("f:\test.xml")
Dim nodes As Xml.XmlNodeList = doc.SelectNodes("//Placemark")
MsgBox(nodes.Count)

看起來是很一般的XML檔呀! 為何會取不到節點呢?

再看詳細一點,原來是因為那個XML中多了xmlns的屬性!

於是把那個xmlns="http://www.opengis.net/kml/2.2"刪除掉,再Run程式就可以取到節點了!

知道是因為xmlns的問題,那就可以解這問題了!

所以再把xmlns加回去,然後使用XmlNamespaceManager來加入Namespace,然後在SelectNodes時傳入它! 這樣就能取到節點的資料了!

Dim doc As New XmlDocument()
doc.Load("f:\test.xml")
Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
namespaceManager.AddNamespace("pf", "http://www.opengis.net/kml/2.2")
Dim nodes As Xml.XmlNodeList = doc.SelectNodes("//pf:Placemark", namespaceManager)
MsgBox(nodes.Count)

 



DotBlogs Tags: namespace xml XmlNamespaceManager xmlns

Feedback

  • irene9108 2011/9/16 下午 02:44 回覆

    # re: [.net]xml讀不到節點

    這個 xml 該不會就是所謂的 kml (地理相關) 的吼?

  • 亂馬客 2011/9/17 上午 07:50 回覆

    # re: [.net]xml讀不到節點

    to 阿奇 :
    可否跟我說是那個問題呢? 在MSDN上說明,有更多高手一起參與討論與解答,也會有更多的想法哦!

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 7 and 3 and type the answer here: