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 は、XSLT などの多くの XML ツールやテクノロジで使用される標準のクエリ言語であるため、習得すると非常に役立ちます。さらに、文書化の場合でも、単純な文字列を介して文書内の特定の XML ノードを明確に参照できると便利な場合があります。LINQ は優れていますが、これは Microsoft 独自のテクノロジであり、LINQ パスを必要に応じてデータベースまたは構成ファイルに文字列として格納することはできないため、XPath の方が適している場合があります。

XPath の別のバリエーションは//category[@name='a']/SubCategoryName. 先頭の二重スラッシュは、特定の親要素の下ではなく、ドキュメント内の任意の場所でカテゴリ要素を検索するように指示します。

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

単純にどうですか

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 に答える