2014-02-15 43 views
2

我正在使用NLua将Lua嵌入到我的C#应用​​程序中。使用XDocument的子元素计数

我希望能够直接在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”,它会正确地返回我1

但我想它很容易在Lua访问子元素,例如:

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

我该怎么做?

谢谢

回答

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()