0

このxmlがある場合

<?xml version="1.0" encoding="utf-8"?>
<super>
  <A value="1234">
    <a1 xx="000" yy="dddddd" />
    <a1 xx="111" yy="eeeeee" />
    <a1 xx="222" yy="ffffff"/>
  </A>
</super>

a1 要素 (xx=222 を持つ) を完全に削除する必要があります。なぜ私のコードを使用してこれが起こらないのですか?? 最初の要素に配置された場合にのみ削除されることに気付きました(つまり、 x=000 を持つ a1 を削除したい場合、最初の要素から削除されます)、なぜですか??

コードのどこが悪いの??

var employee = from emp in element.Elements("A")
    where (string)emp.Element("a1").Attribute("xx") == "222"
    select emp.Element("a1");

foreach (var empployee_1 in employee)
{
    empployee_1.Remove();
}

element.Save(@"TheLocation");

どうもありがとう

4

2 に答える 2

1

これを試してみませんか?

 using System.Linq;
 using System.Xml.Linq;
 using System.Xml.XPath;

 var element = XElement.Parse(@"<?xml version=""1.0"" encoding=""utf-8""?>
                            <super>
                              <A value=""1234"">
                                <a1 xx=""000"" yy=""dddddd"" />
                                <a1 xx=""111"" yy=""eeeeee"" />
                                <a1 xx=""222"" yy=""ffffff""/>
                              </A>
                            </super>");

  // select all the a1's that have xx = 222
  var a1Elements = element.XPathSelectElement("A/a1[@xx='222']"); 

  if (a1Elements != null)
     a1Elements.Remove();

  Console.WriteLine(element);
于 2012-06-13T09:59:38.893 に答える
1

これを試して

 IEnumerable<XElement> element = from element1 in doc.Elements("A") select element1;            

            foreach (XElement xe in element.Elements())
            {
                if (xe.Attribute("xx").Value == "222")
                    xe.Remove();
            }
于 2012-06-13T10:21:50.123 に答える