0

私のxmlは次のようになります:

        <root>
            <x a1 = "abc">
                <y a2 = "def"> 
                    <z value1 = 5 value2 = 10 value3 = 15/>             
                </y>
            </x>
        </root>

私のメインコード:

static void Main(string[] args)
{
    int value;
    IEnumerable<XElement> xs = from x in xDoc.Descendants("x")
                               where (string)x.Attribute("a1") == "abc"
                               select x;
    IEnumerable<XElement> ys = from y in xs.Descendants("y")
                               where (string)y.Attribute("a2") == "def"
                               select time;
    IEnumerable<XElement> zs = from z in ys.Descendants("z")
                               where z.Attribute == value1
                               select z;
}

特定の条件に応じて、int値をノードzの値1、2、または3に設定しようとしています。ノードzで必要な値をフィルタリングしようとすると、問題が発生します。誰かがノードzの一致する値をint値に割り当てる方法を説明できますか?

4

3 に答える 3

0

私があなたを正しく理解しているなら、あなたはzノードのいくつかの要素を選択したいと思います:

string value = "value1";

var query = xDoc.Descendants("x")
                .Where(x => (string)x.Attribute("a1") == "abc")
                .Descendants("y")
                .Where(y => (string)y.Attribute("a2") == "def")
                .Descendants("z")
                .Select(z => (string)z.Element(value))
                .Select(s => Int32.Parse(s.Replace("\"", "")));

クエリの結果- IEnumerable<int>。値が1つあることが確実な場合、または最初の値が必要な場合Singleは、を適用できます。First

"5"また、単純ではなく値を保持する理由もわかりません5

于 2012-12-01T14:12:55.587 に答える
0

ここでXPath(System.Xml.XPath)を使用できます

var elemZ = xDoc.XPathSelectElement("//x[@a1='abc']/y[@a2='def']/z");

int val1 = (int)elemZ.Attribute("value1");

xmlを次のように修正した後 <z value1 = "5" value2 = "10" value3 = "15" />

1つのlinqですべての属性値を取得することもできます

var values = elemZ.Attributes().Select(a => (int)a).ToList();
于 2012-12-01T14:31:26.517 に答える
0

私はあなたがこのようなものが必要だと思います:

 IEnumerable<XElement> z's = from z in y.Descendants("z")
                                  where z.Attribute("value1") != null
                                  select z; 
于 2012-12-01T14:53:50.377 に答える