문제점이 있습니다. 나는 다음과 같은 계층 적 XML 데이터를 가지고 :XElement.Descendants ("Node")가 예상대로 작동하지 않고 여러 수준의 자손을 반환합니다.
<Tree>
<Node Text="Stuff" ItemGUID="064a9bf0-0594-47f8-87be-88dd73763c77" >
<Node Text="Food" ItemGUID="326f1f7a-d364-4838-9bdc-ce5fd93f88ca" ItemType="2" />
<Node Text="Wines" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="Flowers" ItemGUID="cefa8c34-af06-48e7-9c00-4b1422d217a4">
<Node Text="Roses" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f">
<Node Text="Red" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="Pink" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="White" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
</Node>
<Node Text="Tulips" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="Whatever" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
</Node>
<Node Text="Sweet Delights" ItemGUID="1df7dbae-adf0-49a9-aaac-1358468a245b" />
</Node>
</Tree>
을 그리고 난 다음 코드를 사용하고 단지 레드 (장미 아래) 핑크, 화이트없이 꽃 (장미, 튤립, 무엇이든)을 얻기 위해 필요하지만, 때문에 모든 노드가 "노드"라는 사실에 따라 모든 수준의 Descendats를 얻을 수 있습니다. 나는 그것을 단지 한 수준으로 제한하고 싶다.
XElement loadedXML = clients.ItemTreeXML;
//filter only current node
XElement procXML;
procXML = new XElement ("Tree",
from el in loadedXML.Descendants("Node")
where (string)el.Attribute("ItemGUID") == currentNodeGUID
select el);
결과 구함 :
<Tree>
<Node Text="Flowers" ItemGUID="cefa8c34-af06-48e7-9c00-4b1422d217a4">
<Node Text="Roses" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="Tulips" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
<Node Text="Whatever" ItemGUID="950e3ca3-27a1-41fd-89f3-7a8b08633a9f" />
</Node>
</Tree>
감사합니다,
추가
: 아마 SQL 2008 쿼리는 내가 필요로하는 경우에만 노드 분기를 retreive 할 수도 있지만 연구와 테스트를 많이 후, 나는 할 수 없었다 대답을 찾으십시오 ... (내 XML은 SQL 2008의 XML 컬럼에 있습니다)
감사합니다. 나는 똑같은 일을하고 있었다. 더 빠른 방법이 있는지 궁금합니다. 선택적으로 SQL 2008 XML 쿼리는 훌륭하지만 필요한 노드 집합 만 얻는 방법을 찾을 수 없습니다. 실제로 나는 많은 브랜치 중 하나와이 브랜치의 한 레벨만을 필요로 할 때 거대한 XML을로드하는 것을 피하고 싶습니다. – mfr