VB.net 中属性的 Xml 节点值

标签 xml vb.net xmlnode xml-attribute

我有一个像这样的 XML

<Categories>
    <category name="a">
        <SubCategory>1</SubCategory>
        <SubCategoryName>name1</SubCategoryName>
    </category>
    <category name="b">
        <SubCategory>2</SubCategory>
        <SubCategoryName>name2</SubCategoryName>
    </category>
</Categories>

如何获取 <SubCategoryName> 的值来自 <category name="a">

最佳答案

正如 Usman 所推荐的,您可以使用 LINQ,但另一个流行的选择是使用 XPath。您可以使用 XPath 通过 XDocument 类或旧的 XmlDocument 类来选择匹配的元素。

以下是通过 XDocument 类使用 XPath 执行此操作的方法:

Dim doc As New XDocument()
doc.Load(filePath)
Dim name As String = doc.XPathSelectElement("/Categories/category[@name='a']/SubCategoryName").Value

下面是如何通过 XmlDocument 类使用 XPath 完成此操作:

Dim doc As New XmlDocument()
doc.Load(filePath)
Dim name As String = doc.SelectSingleNode("/Categories/category[@name='a']/SubCategoryName").InnerText

这是 XPath 各部分的含义:

  • /Categories - 开头的斜杠指示它在 XML 文档的根目录中查找。斜杠后跟我们要在根中查找的子元素的名称。
  • /category - 我们在 /Categories 元素中查找的元素的名称。
  • [@name='a'] - 方括号表示它是一种条件——类似于 If 语句。 @ 符号表示我们正在指定属性名称(与元素名称相反)。
  • /SubCategoryName - 我们在 category 元素中查找的符合该条件的子元素的名称。

XPath 非常强大和灵活。 XPath 是一种标准的查询语言,被许多 XML 工具和技术所使用,例如 XSLT,因此学习它非常有用。此外,有时,甚至在文档中,能够通过简单的字符串专门引用文档中的特定 XML 节点也很方便。 LINQ 很棒,但它是 Microsoft 的专有技术,如果需要,您不能将 LINQ 路径作为字符串存储在数据库或配置文件中,因此有时 XPath 是更可取的方法。

XPath 的另一个变体是 //category[@name='a']/SubCategoryName。开头的双斜杠指示它在文档中的任何位置查找类别元素,而不是在任何特定的父元素下。

关于VB.net 中属性的 Xml 节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747094/

相关文章:

java - 包含 XML 内容的 CXF Web 服务响应

用于发票的 XML - 行业标准?

java - 如何在 Spring Batch 中读取类 jdbcBatchItemWriter 的 bean 中的 hashmap

xml - 如何在 xpath 表达式上执行 "OR"而无需使用 "|"连接两个 xpath 或使用 xpath 函数?

c# - 从同名节点获取值

c# - WPF:未将对象引用设置为对象的实例

java - 如何从底部设计圆形 View ?

vb.net - 如何获取包含字符串的整行文本

c# - 如何表示这个VB?

.net - 使用 WriteValue 手动绑定(bind)数据