【发布时间】:2018-04-23 09:53:06
【问题描述】:
我对 vb .net 还是很陌生,自从我处理 XML 解析以来已经很长时间了。
我得到了以下 XML 文件:
<?xml version="1.0" encoding="ISO-8859-15"?>
<tns:keyitem_list_test xmlns:tns="http://someurl.com/abc/def">
<tns:name>test.keyitem</tns:name>
<tns:type>test.IKeyItemListDataObject</tns:type>
<tns:keyitem>
<tns:cataloge>testCat</tns:cataloge>
<tns:seq_nr>1</tns:seq_nr>
<tns:keyvalue>01</tns:keyvalue>
<tns:keyvalue_alt>test1</tns:keyvalue_alt>
<tns:keytext>test text 1</tns:keytext>
<tns:keyhelpertext />
<tns:is_temp>false</tns:is_temp>
</tns:keyitem>
<tns:keyitem>
<tns:cataloge>testCat</tns:cataloge>
<tns:seq_nr>2</tns:seq_nr>
<tns:keyvalue>02</tns:keyvalue>
<tns:keyvalue_alt>test2</tns:keyvalue_alt>
<tns:keytext>test text 2</tns:keytext>
<tns:keyhelpertext />
<tns:is_temp>false</tns:is_temp>
</tns:keyitem>
...
</tns:keyitem_list_test>
XML 从 POST 请求返回并保存在变量中。我想提取所有的 tns:keyvalue 标签。
Dim doc = New Xml.XmlDocument()
doc.LoadXml(retVal.return)
Dim nsm = New Xml.XmlNamespaceManager(doc.NameTable)
nsm.AddNamespace("tns", "http://someurl.com/abc/def")
Dim value = doc.SelectSingleNode("/tns:keyvalue", nsm).InnerText
我的问题是价值总是“无”。我尝试了不同的东西,但没有奏效,我不知道为什么。我认为这与命名空间前缀有关。
【问题讨论】:
-
您是否有使用 XmlDocument 而不是 LINQ to XML(XDocument 等)? LINQ to XML 具有更清晰的命名空间支持 IMO。
-
我不知道那是什么。为此,我翻阅了一些旧书。
-
LINQ to XML 是一种更现代的 XML API。如果可以的话,我强烈推荐使用它。
标签: .net xml vb.net namespaces prefix