2014-05-20 200 views
0

我有一個XDocument刪除節點從的XDocument

<axes dimension="y"> 
    <axis id="y11" scale="log" label="label1"> 
     ... 
    </axis> 
    <axis id="y12" scale="log" label="label1"> 
     ... 
    </axis> 
    </axes> 
    <axes dimension="x"> 
    <axis id="x0" label=""> 
     ... 
    </axis> 
    <axis id="x1" label=""> 
     ... 
    </axis> 
    </axes> 

這是一個XDocument,我想從中取出Y12軸,剩下的留在下面的XML片段。因此,最終的輸出將是

<axes dimension="y"> 
    <axis id="y11" scale="log" label="label1"> 
     ... 
    </axis> 
    </axes> 
    <axes dimension="x"> 
    <axis id="x0" label=""> 
     ... 
    </axis> 
    <axis id="x1" label=""> 
     ... 
    </axis> 
    </axes> 

這怎麼辦?

我已經試過這一點,但既然你有一個XDocument,而不是工作的XElement它不工作

xDocument 
    .Elements("axes") 
    .Where(x => (string)x.Attribute("dimension") == "y") 
    .Elements("axis") 
    .Where(x => (string)x.Attribute("id") == "y12") 
    .Remove(); 

回答

0

,你應該使用Root屬性以獲得Elements方法工作打算,並找到元素關閉根:

而不是xDocument.Elements("axes")...使用:

xDocument.Root.Elements("axes") 
    .Where(x => (string)x.Attribute("dimension") == "y") 
    .Elements("axis") 
    .Where(x => (string)x.Attribute("id") == "y12") 
    .Remove(); 

或者,你可以滑雪p Root直接使用Descendants

xDocument.Descendants("axes") 
    .Where(x => (string)x.Attribute("dimension") == "y") 
    .Elements("axis") 
    .Where(x => (string)x.Attribute("id") == "y12") 
    .Remove(); 
0

試試這個:

xDocument.Descendants("axis") 
    .Where(x => (string)x.Attribute("id") == "y12") 
    .Remove();