2

采购清单.xml

<purchaseList>
    <user id="13004">
      <books>
        <book isbn="1111707154" title="Music Potter 2" author="customer" price="10" currency="RM" />
      </books>
    </user>
</purchaseList>

网络服务.cs

xDoc = XDocument.Load(serverPath + "PurchaseList.xml");
XElement xNewBook = (XElement)(from user in xDoc.Descendants("user")
                               where (String)user.Attribute("id") == userID
                               from books in user.Elements("books")
                               select user).Single();

XElement xPurchaseBook = new XElement("book",
    new XAttribute("isbn", xISBN),
    new XAttribute("title", xTitle),
    new XAttribute("author", "customer"),
    new XAttribute("price", xPrice),
    new XAttribute("currency", xCurrency));
xNewBook.Add(xPurchaseBook);
xNewBook.Save(localPath + "PurchaseList.xml");

输出 :

<user id="13004">
    <books>
        <book isbn="1111707154" title="Music Potter 2" author="customer" price="10" currency="RM" />
    </books>
    <book isbn="1439056501" title="Harry Potter" author="customer" price="10" currency="RM" />
</user>

预期输出:

<purchaseList>
    <user id="13004">
      <books>
        <!-- Should append inside here -->
        <book isbn="1111707154" title="Music Potter 2" author="customer" price="10" currency="RM" />
        <book isbn="1439056501" title="Harry Potter" author="customer" price="10" currency="RM" />
      </books>
    </user>
</purchaseList>

如您所见,我希望使用 XElement 附加 xml 文件,但输出不是我所期望的,它甚至删除了标记并附加在错误的位置。

4

1 回答 1

0

代替xNewBook.Add(xPurchaseBook);

xNewBook.Element("books").Add(xPurchaseBook);

您是selecting user in LINQ query并在其中添加了一个新项目。您需要books从用户那里获取元素并添加其中。

或者

您应该获取books元素并保存整个xDoc而不是xNewBook.

XElement xNewBook = (from user in xDoc.Descendants("user")
                      where (String)user.Attribute("id") == "13004"
                       select user.Element("books")).Single();

并保存xDoc-

xDoc.Save(localPath + "PurchaseList.xml");
于 2013-07-28T18:07:21.983 回答