使用XDocument计算子元素的数量

时间:2014-02-15 17:08:59

标签: c# xml linq lua

我正在使用NLua将Lua嵌入到我的C#应用​​程序中。

我希望能够直接在Lua中读取XML,但由于我无法在Lua中执行Linq并且我没有找到任何与NLua兼容的库来读取XML,因此我决定自己使用LINQ。

我想创建一个计算XML文件中元素数量的函数。

这是文件:

<A>
    <B>
        <C>
        </C>
        <C>
        </C>
    </B>
</A>

我想计算有多少“C”元素。

这是我的C#功能:

public int CountElement(string elementName)
{
    var eltNames = from elt in handler.Elements(elementName)
                   select elt;

    return eltNames.Count();
}

如果我用参数“C”调用它,它将不会返回任何内容。 “B”相同。但对于“A”,它会正确地归还给我。

但我希望Lua能够轻松访问子元素,例如:

reader:CountElement("A.B.C")计算“C”元素的数量。

我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:5)

Elements仅返回handler的子元素。你应该得到descendants来获取元素,无论它们在哪里:

public int CountElement(string elementName)
{
    var eltNames = from elt in handler.Descendants(elementName)
                   select elt;

    return eltNames.Count();
}

或者更短的方式

public int CountElement(string elementName)
{    
    return handler.Descendants(elementName).Count();
}

如果要计算某些路径下的元素,例如A/B/C

,也可以使用XPath
handler.XPathSelectElements("A/B/C").Count()