1
<Root>
    <Sub>
        <Name>a</Name>
        <Value>1</Value>
    </Sub>
    <Sub>
        <Name>b</Name>
        <Value>2</Value>
    </Sub>
</Root>

Value要素に依存する要素の値を選択するにはどうすればよいNameですか?

編集: XDocument では、「a」があるときに値「1」を取得するにはどうすればよいですか。

4

4 に答える 4

2

Valueプロパティに直接アクセスする代わりに、キャスト ノードを使用することをお勧めします。

int value = xdoc.Descendants("Sub")
                .Where(s => (string)s.Element("Name") == "a")
                .Select(s => (int)s.Element("Value"))
                .FirstOrDefault();

欠落しているノードのデフォルト値 (ゼロ) がニーズに合わない場合は、Sub値を取得する前に必要な要素が存在することを確認できます。

var sub = xdoc.Descendants("Sub")
              .FirstOrDefault(s => (string)s.Element("Name") == "a");

if (sub != null)            
    value = (int)sub.Element("Value");

または、XPath と Linq を使用して単純に 1 行:

int value = (int)xdoc.XPathSelectElement("//Sub[Name='a']/Value");
于 2013-03-11T19:06:04.183 に答える
1

これはそれを行う必要があります:

doc(が のインスタンスであると仮定XDocument)

string name = "a";
var items = doc.Descendants("Sub")
               .Where(s => (string)s.Element("Name") == name)
               .Select(s => s.Element("Value").Value);

itemsIEnumerable<string>この場合はになります。

必要な値が 1 つだけであることがわかっている場合:

string name = "a";
string value = doc.Descendants("Sub")
               .Where(s => (string)s.Element("Name") == name)
               .Select(s => s.Element("Value").Value)
               .FirstOrDefault();
于 2013-03-11T19:02:15.643 に答える
1

あなたはこれを試すことができます、役立つかもしれません

var results = from row in xdoc.Root.Descendants("Sub")
where row.Element("Name").value ="value"
select new XElement("row", row.Element("Value"));
于 2013-03-11T18:59:14.100 に答える
1

さて、考えてみてください...

タグ<Name>の値を読み取るよりも、XML ファイルの内部テキストが条件と一致するかどうかを確認するだけで、簡単に XML ファイルを読み取ることができます。<value>

ここでは、 C#コードからXMLファイルを読み取る方法についての回答を得ることができます。

于 2013-03-11T18:56:04.527 に答える