2013-12-19 48 views
0

我正在尋找一種通過名稱來搜索和刪除節點的方法。在C#中通過不同的XML對象以字符串搜索XML節點

我有XML例如,我想刪除節點<aRemove>

我嘗試使用:

xmlDoc.SelectNodes("//aRemove"); 
xmlDoc.SelectNodes(".//aRemove"); 
xmlDoc.SelectNodes("a aRemove"); 

XML文件:

<a> 

     <a1> 
      <a12> 
        <aRemove> </aRemove> 
      </a12> 

     </a1> 

     <a2> 

     <a2> 

    </a> 

它永遠也找不到該節點。我的XML是不同的......一個<aRemove><a1></a1>和其他內部<b><b3></b3></b>

編輯:一些以XML格式的有屬性的節點,例如:

<a2=t655> </a2> 

我如何可以搜索節點通過串並刪除它,它不同的XML對每一個?

+0

你確定你的XML不包含'xmlns'屬性? –

+0

某些文件有屬性...是否重要? – AlexKulr

+2

哇,是一個有效的XML格式,''?不是''?對不起,如果這實際上是有效的,我只是從來沒有見過這種格式的xml .. – har07

回答

1

這可能很容易與System.Xml.Linq。

var xml = XElement.Parse(xmlString);//alternatively, you can load xml from file with XElement.Load(filepath) 
xml.XPathSelectElements(".//aRemove").Remove(); 

編輯:

正如阿列克謝Levenkov在評論所說,如果aRemove元素具有與其相關的命名空間,並要刪除名稱爲aRemove所有元素,無論它們屬於哪個命名空間,您可以嘗試xpath ".//*[local-name()='aRemove']。使用XML LINQ的代碼片段會,

var xml = XElement.Parse(xmlString);//alternatively, you can load xml from file with XElement.Load(filepath) 
xml.XPathSelectElements(".//*[local-name()='aRemove']").Remove(); 
+0

+0:OP已聲稱''.//aRemove「'XPath找不到節點 - 所以很可能還有其他一些問題(如名稱空間)。 –

+0

'local-name()'是一個C#屬性,或者我應該將其更改爲任何字符串? – AlexKulr

+0

local-name()是一個xpath函數,它給你一個元素的名字,忽略它的名字空間。 –

0

你可以做這樣的事情:

 string fileName = @"c:\test\test.xml"; 
     XDocument doc = XDocument.Load(fileName); 
     doc.Descendants("aRemove").Remove<XElement>(); 
     doc.Save(fileName);