#c# #xml #linq-to-xml
#c# #xml #linq-to-xml
Вопрос:
У меня есть XML-документ, который выглядит следующим образом:
<BrowseNodes>
<BrowseNode>
<BrowseNodeId>4075981</BrowseNodeId>
<Name>Nutrition Bars</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>4075971</BrowseNodeId>
<Name>Nutrition Bars amp;amp; Drinks</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3764441</BrowseNodeId>
<Name>Diet amp;amp; Nutrition</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3760931</BrowseNodeId>
<Name>Products</Name>
<IsCategoryRoot>1</IsCategoryRoot>
<Ancestors>
<BrowseNode>
<BrowseNodeId>3760901</BrowseNodeId>
<Name>Health amp;amp; Personal Care</Name>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</BrowseNodes>
Я хочу выполнить запрос XLINQ, чтобы найти корень категории. Как это сделать, не указывая, сколько предков на самом деле может быть включено?
Комментарии:
1. Что такое
Category
? Я не вижу этого узла в вашей разметке.2. Что вы имеете в виду под «корнем категории»? Можете ли вы привести нам пример — что такое запрос и каков ожидаемый результат?
3. @JamesJohnson <IsCategoryRoot>1</IsCategoryRoot>
4. @JoeTyman: Понял. Я думаю, Дейвшоу вас просветил.
5. @KierenJohnstone Я хочу перейти к браузерному узлу с именем Heath amp; Personal Care
Ответ №1:
Вы должны использовать свойство Descendants.
var node =
XElement.Parse(xmlString)
.Descendants()
.Where(xe => xe.Element("IsCategoryRoot") != null amp;amp; xe.Element("IsCategoryRoot").Value == "1");