如何从xml限制读取具有递归子标签的多个子标签?

时间:2017-04-11 13:03:12

标签: c# xml xelement

我有一个有多个标签的xml。例如:

<code>
    <Value>abc</value>
    <F> T </F>
    <F> A </F>
    <code1>
        <Value>abc</value>
        <F> T </F>
    </code1>
</code>

我想读取仅与第一个代码相关联的标签,即前两个标签。但我的程序也在读取code1的标签。

foreach (var item in  element.Descendants("F"))
    {
        flNodeText = flNodeText + Convert.ToString(item.Nodes().First());
    }

元素是上面提到的整个xml。 我怎样才能让它只读取前两个标签。

标签数量可能会有所不同。

2 个答案:

答案 0 :(得分:1)

使用Elements仅返回直接孩子。您还可以使用XElement.Value来获取元素的文本内容。

var values = element.Elements("F")
    .Select(x => x.Value);

var flNodeText = string.Concat(values);

请参阅this fiddle

答案 1 :(得分:0)

在VB .Net中,这将是

    ' for testing
    Dim xe As XElement = <code>
                             <Value>abc</Value>
                             <F> T </F>
                             <F> A </F>
                             <code1>
                                 <Value>abc</Value>
                                 <F> Z </F>
                             </code1>
                         </code>

    'returns all <F> nodes of root only
    Dim ie As IEnumerable(Of XElement) = xe.<F>
    'returns all <F> nodes of code1 only
    ie = xe.<code1>.<F>
    'returns all <F> nodes
    ie = xe...<F>