来自VB.net中属性的Xml节点值

时间:2013-02-07 08:54:49

标签: 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">的价值?

5 个答案:

答案 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