次の方法で共有


方法 : 直前の兄弟を検索する (XPath-LINQ to XML)

ノードの直前の兄弟を検索することが必要になる場合があります。 LINQ to XML とは対照的に、XPath では先行する兄弟軸の位置述語にはセマンティクス上の違いがあります。この LINQ to XML と XPath の相違点は、注目すべき特徴といえます。

使用例

この例では、LINQ to XML クエリは、Last 演算子を使用して、ElementsBeforeSelf から返されるコレクション内の最後のノードを検索します。対照的に、XPath 式は、値が 1 の述語を使用して、直前の要素を検索します。

XElement root = XElement.Parse(
    @"<Root>
    <Child1/>
    <Child2/>
    <Child3/>
    <Child4/>
</Root>");
XElement child4 = root.Element("Child4");

// LINQ to XML query
XElement el1 =
    child4
    .ElementsBeforeSelf()
    .Last();

// XPath expression
XElement el2 =
    ((IEnumerable)child4
                 .XPathEvaluate("preceding-sibling::*[1]"))
                 .Cast<XElement>()
                 .First();

if (el1 == el2)
    Console.WriteLine("Results are identical");
else
    Console.WriteLine("Results differ");
Console.WriteLine(el1);
Dim root As XElement = _ 
    <Root>
        <Child1/>
        <Child2/>
        <Child3/>
        <Child4/>
    </Root>
Dim child4 As XElement = root.Element("Child4")

' LINQ to XML query
Dim el1 As XElement = child4.ElementsBeforeSelf().Last()

' XPath expression
Dim el2 As XElement = _
    DirectCast(child4.XPathEvaluate("preceding-sibling::*[1]"),  _
    IEnumerable).Cast(Of XElement)().First()

If el1 Is el2 Then
    Console.WriteLine("Results are identical")
Else
    Console.WriteLine("Results differ")
End If
Console.WriteLine(el1)

この例を実行すると、次の出力が生成されます。

Results are identical
<Child3 />

参照

概念

XPath ユーザー向けの LINQ to XML