2

PurchaseList.xml

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

WebService.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全体を保存する必要があります。xDocxNewBook

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 に答える