방법: 바로 이전 형제 찾기(XPath-LINQ to XML)
노드의 바로 이전 형제를 찾으려는 경우가 있습니다.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 />