5

我有一个类似的 XML

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

我如何获得<SubCategoryName>from的值<category name="a">

4

5 回答 5

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语句。@ 符号表示我们正在指定一个属性名称(而不是元素名称)。
  • /SubCategoryNamecategory- 我们在匹配该条件的元素中查找的子元素的名称。

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

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

于 2013-02-07T11:30:40.010 回答
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

于 2013-02-07T09:17:14.527 回答
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
于 2013-02-07T09:34:46.540 回答
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
于 2013-02-07T09:40:18.607 回答
0

代码很好,而不是

sResult = cat("SubCategoryName").Value

采用

sResult = cat("SubCategoryName").InnerText

于 2015-03-04T11:24:56.043 回答