gpt4 book ai didi

.net - 在 vb .net 中使用命名空间前缀解析 XML

转载 作者:行者123 更新时间:2023-12-04 17:01:51 25 4
gpt4 key购买 nike

我对 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

我的问题是值(value)总是“无”。我尝试了不同的东西,但没有奏效,我不知道为什么。我认为这与命名空间前缀有关。

最佳答案

直接的问题在于您的 XPath 表达式:

Dim value = doc.SelectSingleNode("/tns:keyvalue", nsm).InnerText

那只是在寻找名为 keyvalue 的根元素.如果将其更改为查找后代,则会找到第一个 keyvalue节点:
Dim value = doc.SelectSingleNode("//tns:keyvalue", nsm).InnerText

或者寻找所有节点而不仅仅是第一个:
Dim nodes = doc.SelectNodes("//tns:keyvalue", nsm)
For Each node as Xml.XmlNode in nodes
Console.WriteLine(node.InnerText)
Next

但是,如果可以,我建议使用 LINQ to XML,它具有更清晰的命名空间支持,并且更好地支持不使用 XPath 的查询:
Dim doc = XDocument.Parse(retVal.return)
Dim ns As XNamespace = "http://someurl.com/abc/def"
Dim elements = doc.Descendants(ns + "keyvalue")
For Each element in elements
Console.WriteLine(element.Value)
Next

关于.net - 在 vb .net 中使用命名空间前缀解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49978106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com