2014-01-27 73 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”的例子解决了问题。