0

これがxml構造です。State に Failed という単語が含まれる各 Status ノードを削除しようとしています。これらを削除する最良の方法は何ですか?

<Stats>
    <Status>
        <Desc>something here</Desc>
        <State>pending - ok</State>
    </Status>
    <Status>
        <Desc>something here</Desc>
        <State>failed</State>
    </Status>
</Stats>
4

3 に答える 3

1
void Main()
{   
    XDocument xml = XDocument.Parse(@"<Stats>
    <Status>
        <Desc>something here</Desc>
        <State>pending - ok</State>
    </Status>
    <Status>
        <Desc>something here</Desc>
        <State>failed</State>
    </Status>
</Stats>");

    xml.Descendants("State").Where (x => x.Value.Contains("fail")).Ancestors("Status").Remove();
    Console.WriteLine(xml.ToString());  
}

Parse は xml をメモリ内にロードします。Load は、ストリームから、または I/O 手段を介してロードするために使用されます。

@Gregory Pilarの回答は、この回答に大きな影響を与えました。彼は記憶から、私が提供したスニペットは LinqPad を介してテストされ、期待される結果を返すと書いたと思います。

于 2013-09-25T04:30:45.107 に答える
1

Linq to XML を使用してジョブを実行できます

var xdoc = XDocument.Load(path_to_xml);

xdoc.Descendants("Status")
.Where(os => (int)os.Attribute("State") == "failed")
.Remove();

xdoc.Save(path_to_xml);
于 2013-09-25T02:29:03.020 に答える