0

特定の条件に一致するXmlNode全体を削除しようとしています

私のxmlファイルの形式は次のとおりです。

    <?xml version="1.0" encoding="utf-8"?>
<Advertisements>
  <Ad>
    <ImageUrl>image/Hydrangeas.jpg</ImageUrl>
    <NavigateUrl>www.google.com</NavigateUrl>
    <AlternateText>nbfndbf</AlternateText>
    <ID>0</ID>
    <Impressions>1</Impressions>
  </Ad>
</Advertisements>

私の削除コード:

      XElement x = 
                new XElement("Ad",
                  new XElement("ImageUrl", lblImageURL.Text),
                  new XElement("NavigateUrl", lblImageURL.Text),

                  new XElement("AlternateText", lblAlternateText.Text),
                    new XElement("ID", lblID.Text),
             new XElement("Impressions", lblfrequency.Text));



            string filepath = Request.PhysicalApplicationPath.ToString() + "Adrotator.xml";



            XmlDocument xD = new XmlDocument();

            xD.LoadXml(x.ToString());
            XmlNode xN = xD.FirstChild;

            xN.ParentNode.RemoveChild(xN);



            **xD.Save(filepath);**

無効なXMLドキュメントというエラーが発生します。ドキュメントにルート要素がありません。

4

2 に答える 2

1

linq to xmlを使用して、これを実現できます。ここでは、値ID=0のノードを削除する方法を例示します。

var q = (from c in doc.Descendants("Advertisements")
        from v in c.Elements("Ad")
        where (int) v.Element("ID") == 0
       select v).Remove();

これがxpathを使用した別の例です

doc.XPathSelectElement("Advertisements/Ad[ID = 0]").Remove();
于 2012-12-24T07:58:24.517 に答える
0

次のコードを使用して、新しいXDocument(ドキュメント)を作成します。

XDocument doc = XDocument.Load(filepath);

Xmlファイル(ルート要素を含む)に何かがありますか?また、コードでdocを使用していないように見えるので、少なくとも必須ではありません。

于 2012-12-24T08:01:22.420 に答える