根據此XML,請注意BBB存在於兩個節點級別。使用LINQ從相同名稱的集合中排除子節點
<?xml version="1.0" encoding="utf-8"?>
<AAA>
<BBB>
<BBB>ONE</BBB>
<CCC>1</CCC>
<DDD>2</DDD>
<EEE>3</EEE>
</BBB>
<BBB>
<BBB>TWO</BBB>
<CCC>4</CCC>
<DDD>5</DDD>
<EEE>6</EEE>
</BBB>
<BBB>
<BBB>THREE</BBB>
<CCC>7</CCC>
<DDD>8</DDD>
<EEE>9</EEE>
</BBB>
</AAA>
我想獲得的最高級別BBB的集合,並提取到自己的文件,基於內BBB的文件名。
我的代碼是這樣的:
XDocument xdoc = XDocument.Load(sourceFile);
var lv1s = from lv1 in xdoc.Descendants("AAA") select lv1;
var lv2s = from lv2 in xdoc.Descendants("BBB") select lv2;
foreach (var lv2 in lv2s)
{
var name = lv2.Element("BBB").Value;
lv2.Save(@"c:\temp\" + name + ".xml");
}
問題是,LVL2是拿起兩個父母和後代BBB。 似乎無法找到有效過濾後代的方法。
例如,我認爲這是關鍵,但沒有結果:
var lv2s = from lv2 in xdoc.Elements("BBB") select lv2;
希望你能提供給我一個方法來處理這個問題。
--------------------編輯--------------------
好吧,我明白我做錯了什麼。一個錯字。
LVL2應該利用LVL1,像這樣:
var lv2s = from lv2 in lv1s.Elements("BBB") select lv2;
也就是說,octavioccl的做法比我想出瞭解決臃腫好得多:
var parentBbbs =xdoc.Element("AAA").Elements("BBB");
感謝的作品。 – flaZer
不客氣,很高興幫助;) – octavioccl