我有一个像这样的 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/