0

私はC#を初めて使用します。問題があります...ファイルから削除したいselected nodeここXMlでこのコードを試してみましたが、うまくいきませんでした。

private void btnDelete_Click(object sender, EventArgs e)
{
    xdoc.Load(strFilename);
    string Xpath = string.Format("root/{0}/{1}",_strProCat,_strProdType);
    xdoc.SelectSingleNode(Xpath).RemoveAll();

    xdoc.Save(strFilename);
    MessageBox.Show("Deleted Successfully");
}

ここに私のXMLファイル

<root>
  <product category="Soaps">
   <product type="Washing">
     <product name="Rin">
      <Id>100</Id>
      <AvailProducts>30</AvailProducts>
      <Cost>20.00</Cost>
   </product>
  <product name="Tide">
    <Id>101</Id>
    <AvailProducts>30</AvailProducts>
    <Cost>15.00</Cost>
  </product>
 </product>
</product>
</root>

ノードのどの製品を削除したいだけですかname="Tide"

4

3 に答える 3

1

以下のコードを簡単に使用できます。

private void btnDelete_Click(object sender, EventArgs e)
{
    var xDoc = XDocument.Load(strFilename);

    foreach (var elem in xDoc.Document.Descendants("product"))
    {
        foreach (var attr in elem.Attributes("name"))
        {
            if (attr.Value.Equals("Tide"))
                elem.RemoveAll();
        }
    }

    xDoc.Save(destinationFilename);
    MessageBox.Show("Deleted Successfully");
}

ハッピーコーディング...

于 2012-10-08T12:46:54.843 に答える
1

このような何かがそれを行う必要があります:

xdoc.Elements("product").Where(x=> x.Element("name").Value == "Tide").FirstOrDefault().Remove();
于 2012-10-08T12:47:08.307 に答える
1

あなたがXPathそれから望むならXmlDocument、以下はそれをする方法です。

XmlDocument xdoc = new XmlDocument();
xdoc.Load(strFilename);
string Xpath = string.Format("root/product[@category='{0}']/product[@type='{1}']/product[@name='{2}']", "Soaps", "Washing", "Tide");
xdoc.SelectSingleNode(Xpath).RemoveAll();
xdoc.Save(strFilename);

アップデート

要件To Remove the empty nodeに従って、次のコードを試して、空のノードを次のように削除してください

XmlNodeList emptyElements = xdoc.SelectNodes(@"//*[not(node())]");
for (int i = emptyElements.Count - 1; i > -1; i--)
{
     XmlNode nodeToBeRemoved = emptyElements[i];
     nodeToBeRemoved.ParentNode.RemoveChild(nodeToBeRemoved);
}

これで、最終的な完全な肉体コードは次のようになります。

string Xpath = string.Format("root/product[@category='{0}']/product[@type='{1}']/product[@name='{2}']", "Soaps", "Washing", "Tide");                      
xdoc.SelectSingleNode(Xpath).RemoveAll();
XmlNodeList emptyElements = xdoc.SelectNodes(@"//*[not(node())]");

for (int i = emptyElements.Count - 1; i > -1; i--)
{
      XmlNode nodeToBeRemoved = emptyElements[i];
      nodeToBeRemoved.ParentNode.RemoveChild(nodeToBeRemoved);
}
xdoc.Save(strFilename);
于 2012-10-08T12:52:56.833 に答える