我正在尋找一種方法來查找使用linq的XML樹中的第一個結果級別。該XML我已經是這樣的:如何找到給定名稱的最高級別後代
<column>
<row>
<object/>
<column column-id="1" column-name="abc">
<row>
<column>
<row>
<column column-id="2" column-name="abc"/>
</row>
</column>
</row>
</column>
</row>
<row>
<column column-id="3" column-name="abc">
<row>
<column/>
</row>
</column>
</row>
</column>
現在,我想所有的第一級columns
其中列名是abc
。所以結果應該是:
<column column-id="1" column-name="abc">...</column>
<column column-id="3" column-name="abc">...</column>
我已經嘗試下面的代碼:
layout.Descendants("column")
.Where(x => x.Attribute("column-name").Value.Equals("abc") && !x.Ancestors("column").Any());
當被搜索的XElement layout
未命名"column"
而不是嵌套命名"column"
任何容器元素中也能正常工作。但我的XElement
實際上屬於一個文檔,其根元素名爲"column"
,所以x.Ancestors("column").Any()
表達式錯誤地過濾了所有匹配。即
var layout = XElement.Parse(xmlString);
我想保持關係的變量,因爲改變我必須讓後來的:這個問題可以用XML字符串通過初始化layout
如下轉載上述。
有沒有可能限制祖先選擇器的方法?
請提供您的解決方案不起作用的示例。這將有所幫助。 –
@GeorgeAlexandria - 實際上問題中的XML確實重現了這個問題,但從文本中看不清楚。 – dbc