2014-01-27 91 views
-1

在VS2008中使用VB.NET。在VB.NET中讀取XML節點

示例XML文件

<MailListExportXML xsi:schemaLocation="com.efi.planner.mailing.export MonarchMailListExport.xsd" xmlns="com.efi.planner.mailing.export" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<MailListFiles> 
    <MailListFile MailListID="1" MailListName="Test Mail File 11-14-2013.csv" MailListDateTimeStamp="2013-12-04T19:18:00Z" MailListFileLocationPath="c:ImportedMailFiles" StatedFirstRecord="George Vaisey" StatedLastRecord="Mary Smith" TotalMailListRecordCount="1992"/></MailListFiles> 
</MailListExportXML> 

我掙扎着從MailListName獲得價值來填充到一個文本框。

+0

我有我一直在努力的代碼,但沒想到我應該將它作爲失敗的語法錯誤發佈。 –

回答

1

你有一個默認的命名空間,所以你需要在XPath查詢指定命名空間使用XmlNamespaceManager

Dim doc As XmlDocument = New XmlDocument() 
doc.Load("path_to_xml_file.xml") 
Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable) 
namespaceManager.AddNamespace("d", doc.DocumentElement.NamespaceURI) 
Dim node As XmlNode = doc.SelectSingleNode("d:MailListExportXML/d:MailListFiles/d:MailListFile[@MailListID=1]") 
MyTextBox.Text = node.Attributes.GetNamedItem("MailListName").Value 

參考:SO Post about XPath query to select nodes having default namespace]

UPDATE:

我的壞,我錯過了一兩件事,在上面的代碼片段沒有使用namespaceManager。由OP,這條線在上面的代碼片段,從而證實:

Dim node As XmlNode = doc.SelectSingleNode("d:MailListExportXML/d:MailListFiles/d:MailListFile[@MailListID=1]") 

應該是這樣的,而不是(注意:namespaceManagerSelectSingleNode函數的第二個參數):

Dim node As XmlNode = doc.SelectSingleNode("d:MailListExportXML/d:MailListFiles/d:MailListFile[@MailListID=1]", namespaceManager) 
+0

名稱空間管理器運行良好,但產生了有關無效令牌的錯誤。我不得不改變doc.selectsinglenote引用命名空間管理器,它的工作。修改後的行如下: Dim node As XmlNode = doc.SelectSingleNode(「d:MailListExportXML/d:MailListFiles/d:MailListFile [@ MailListID = 1]」,namespaceManager) –

+0

我的不好,忘了使用'namespaceManager' 。你是對的,如果不將它作爲'SelectSingleNode'的參數傳遞,那麼創建'namespaceManager'就沒用了。更新我的答案以澄清這一點。 – har07

1

你可以嘗試這樣的事:根據你的錯誤

Dim xmlDoc As XmlDocument = New XmlDocument() 
xmlDoc.Load(PATH TO XML FILE) 

Dim docNode As XmlNode = xmlDoc.SelectSingleNode("MailListExportXML/MailListFiles/MailListFile[@MailListID=1]") 
SOMETEXTBOX.Text = docNode.Attributes.GetNamedItem("MailListName").Value 
xmlDoc = Nothing 

,確保xmlDoc.Load( ...是實際的XML文檔的路徑和名稱下方是MapPath方法。例如但你可以像使用絕對路徑爲「C:\的Inetpub \ wwwroot的\ web應用程序\ App_Data文件\ Mailing.xml」

Dim xml_doc As XmlDataDocument = New XmlDataDocument() 
xml_doc.Load(Server.MapPath("~/App_Data/NAME AND PATH OF XML FILE.xml")) 
Dim docNode As XmlNode = xml_doc.SelectSingleNode("MailListExportXML/MailListFiles/MailListFile[@MailList‌​ID=1]") 
tbMMInputFile.Text = docNode.Attributes.GetNamedItem("MailListName").Value 
xmlDoc = Nothing 
+0

這裏是我使用的代碼生成一個關於空的URL的錯誤。 昏暗xml_doc作爲的XmlDataDocument =新的XmlDataDocument xml_doc.Load(tbMMInputFile.Text) 昏暗docNode作爲XmlNode的= xml_doc.SelectSingleNode( 「MailListExportXML/MailListFiles/MailListFile [@ MailListID = 1]」) tbMMInputFile.Text = docNode .Attributes.GetNamedItem(「MailListName」)。值 –

0

使用與「namespacemanager」的例子解決了問題。