簡體   English   中英

嘗試根據屬性值刪除XML節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM