[.net]xml讀不到節點

[.net]xml讀不到節點

今天在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)