[英]Trying to delete an XML Node based on attribute value
我試圖基於某些屬性值從XML刪除一條記錄。 我的XML結構如下:
<?xml version="1.0" encoding="utf-8"?>
<Users>
<User>
<UserId>12345</UserId>
<FirstName>abcd</FirstName>
<LastName>efgh</LastName>
<Email>Hello@hello.com</Email>
<IsAdmin>No</IsAdmin>
</User>
<User>
<UserId>67890</UserId>
<FirstName>ijklm</FirstName>
<LastName>nopqr</LastName>
<Email>world@world.com</Email>
<IsAdmin>No</IsAdmin>
</User>
<User>
<UserId>12678</UserId>
<FirstName>stuv</FirstName>
<LastName>wxyz</LastName>
<Email>foo@bar.com</Email>
<IsAdmin>Yes</IsAdmin>
</User>
</Users>
例如,如果屬性值為12345,則應從XML中刪除以下記錄。
<User>
<UserId>12345</UserId>
<FirstName>abcd</FirstName>
<LastName>efgh</LastName>
<Email>Hello@hello.com</Email>
<IsAdmin>No</IsAdmin>
</User>
我嘗試使用下面的代碼,但無法從XML刪除任何內容。
string path = Server.MapPath("~/XML/users.xml");
XElement xEle = XElement.Load(path);
var qry = from element in xEle.Descendants()
where (string)element.Attribute("UserId").Value == "12345"
select element;
if (qry.Count() > 0)
qry.First().Remove();
xEle.Save(path);
我無法弄清楚。 任何幫助,不勝感激。 謝謝
<UserId>12345</UserId>
是<User>
的嵌套子元素,而不是屬性。 請參閱XML屬性與XML元素以了解區別。
因此,您需要執行以下操作:
var userId = "12345";
var qry = from element in xEle.Descendants("User")
where (string)element.Element("UserId") == userId
select element;
var first = qry.FirstOrDefault();
if (first != null)
first.Remove();
順便說一句,通過同時調用Count()
和First()
,您正在兩次評估查詢。 FirstOrDefault()
返回第一個匹配的元素;如果可枚舉為空,則返回null
,因此效率更高。
UserId不是XML中的屬性。 它是一個要素
XElement xEle = XElement.Load("input.xml");
var qry = from element in xEle.Descendants()
where (string)element.Element("UserId") == "12345"
select element;
if (qry.Count() > 0)
qry.First().Remove();
xEle.Save("input.xml");
在您的代碼段中,您正在將12345 int與字符串類型進行比較
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.