0

私は次のXMLファイルを持っています:

<Categories>
<Category name="TopDown">
    <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
    <Path>http://localhost:8080/images/TopDown/Blu-Ray.png</Path>
    <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
    <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
    <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
    <Path>http://localhost:8080/images/TopDown/Divx.png</Path>  
</Category>
<Category name="SideScroll">
    <Path>http://localhost:8080/images/SideScroll/MediaMonkey.png</Path>
    <Path>http://localhost:8080/images/SideScroll/Miro.png</Path>
    <Path>http://localhost:8080/images/SideScroll/QuickTime.png</Path>
    <Path>http://localhost:8080/images/SideScroll/VLC.png</Path>
    <Path>http://localhost:8080/images/SideScroll/WinAmp.png</Path>
</Category>

私のc#コードには、カテゴリの「名前」属性を表す文字列を取得する関数があり、その文字列がその属性と等しい場合は、「パス」タグ間のすべてのテキストを取得したいと思います。たとえば、関数が「TopDown」に等しい文字列パラメータを取得した場合、出力は次のようになります。

http://localhost:8080/images/TopDown/Divx.png
    http://localhost:8080/images/TopDown/Blu-Ray.png
    http://localhost:8080/images/TopDown/Divx.png
    http://localhost:8080/images/TopDown/Divx.png
    http://localhost:8080/images/TopDown/Divx.png
    http://localhost:8080/images/TopDown/Divx.png

ありがとうございました。

4

1 に答える 1

1

これは、LINQToXMLを使用して実行できます。

var xdoc = @"<Categories>
    <Category name='TopDown'>
        <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
        <Path>http://localhost:8080/images/TopDown/Blu-Ray.png</Path>
        <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
        <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
        <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
        <Path>http://localhost:8080/images/TopDown/Divx.png</Path>
    </Category>
    <Category name='SideScroll'>
        <Path>http://localhost:8080/images/SideScroll/MediaMonkey.png</Path>
        <Path>http://localhost:8080/images/SideScroll/Miro.png</Path>
        <Path>http://localhost:8080/images/SideScroll/QuickTime.png</Path>
        <Path>http://localhost:8080/images/SideScroll/VLC.png</Path>
        <Path>http://localhost:8080/images/SideScroll/WinAmp.png</Path>
    </Category>
</Categories>";

var paths = XDocument.Parse(xdoc).Descendants("Category")
        .Where(w => (string)w.Attribute("name") == "TopDown")
        .Select(s => s.Elements("Path").Select (x => (string)x)).ToList();


foreach (var x in paths)
    Console.WriteLine(x);

それをコピーしてlinqpadまたはビジュアルスタジオに貼り付けると、実行されます。

于 2012-07-13T00:04:08.633 に答える