10

XElement子要素を取得せずにの値を取得するにはどうすればよいですか?

例:

<?xml version="1.0" ?>
<someNode>
    someValue
    <child>1</child>
    <child>2</child>
</someNode>

XElement.Valueを使用して文字列<someNode>を取得したが、サブ文字列"somevalue<child>1</child><child>2<child>"なしで「somevalue」のみを取得したい場合"<child>1</child><child>2<child>"

4

3 に答える 3

12

使用するよりも少し簡単に行うことができます。DescendantsこのNodesメソッドは直接の子ノードのみを返します。

XElement element = XElement.Parse(
    @"<someNode>somevalue<child>1</child><child>2</child></someNode>");
var firstTextValue = element.Nodes().OfType<XText>().First().Value;

これは、次のように、子要素がテキストノードの前にある場合でも機能することに注意してください。

XElement element = XElement.Parse(
    @"<someNode><child>1</child><child>2</child>some value</someNode>");
var firstTextValue = element.Nodes().OfType<XText>().First().Value;
于 2010-07-11T20:50:52.007 に答える
3

直接的な方法はありません。繰り返して選択する必要があります。例えば:

var doc = XDocument.Parse(
    @"<someNode>somevalue<child>1</child><child>2</child></someNode>");
var textNodes = from node in doc.DescendantNodes()
                where node is XText
                select (XText)node;
foreach (var textNode in textNodes)
{
    Console.WriteLine(textNode.Value);
}
于 2010-07-11T20:24:30.537 に答える
0

あなたが望むのは最初の子孫ノードだと思うので、次のようになります。

var value = XElement.Descendents.First().Value;

XElementあなたの要素を表す要素はどこにありますか<someNode>

特に最初のテキスト要素(「somevalue」)を要求できるので、次のこともできます。

var value = XElement.Descendents.OfType<XText>().First().Value;
于 2010-07-11T20:24:54.810 に答える