我有像
这样的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">
的价值?
答案 0 :(得分:6)
正如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
。开头的双斜杠指示它在文档中的任何位置找到类别元素,而不是在任何特定的父元素下。
答案 1 :(得分:0)
如何简单地
Dim xml = <Categories>
<category name="a">
<SubCategory>1</SubCategory>
<SubCategoryName>name1</SubCategoryName>
</category>
<category name="b">
<SubCategory>2</SubCategory>
<SubCategoryName>name2</SubCategoryName>
</category>
</Categories>
Dim result = xml.<category> _
.First(Function(e) e.Attribute("name") = "a") _
.<SubCategoryName>.Value
result
现在是name1
。
答案 2 :(得分:0)
您可以将其用作
Dim doc As XDocument = XDocument.Load("YourXMLFileName")
Dim query = From d In doc.Descendants("Categories").Elements("category")
Where d.Attribute("name").Value = "a"
Select d.Element("SubCategoryName").Value
答案 3 :(得分:0)
你可以这样做:
Dim aux As New Xml.XmlDocument()
Dim nodeLst As Xml.XmlNodeList
Dim sResult As String = String.Empty
aux.Load(sXmlFilePath)
nodeLst = aux.GetElementsByTagName("category")
For Each cat As Xml.XmlElement In nodeLst
If cat.GetAttribute("name") = "a" Then
sResult = cat("SubCategoryName").Value
Exit For
End If
Next
答案 4 :(得分:0)
代码很好,而不是
sResult = cat("SubCategoryName").Value
使用
sResult = cat("SubCategoryName").InnerText