我正在使用XmlReader
和xml导航器,如下所示:
XmlDocument doc = new XmlDocument();
doc.Load(txtFileName.Text.Trim());
// Create the navigator.
XPathNavigator xnav = doc.CreateNavigator();
创建导航后,您可以选择后代或子项,然后您可以确定子项的数量。但是,我有问题,当我需要知道该节点的属性数量时我不能,例如,如果你想知道你使用以下代码的孩子数量。
int size = xnav.SelectDescendants(XPathNodeType.All, true).Count;
在这种情况下,此函数接受两个参数:要选择的节点类型,如文本注释或元素,如果希望选择此子树的根,即当前节点,则将第二个参数设置为true以及子树的一部分。
select[*]
的结果是XPathIterator对象。
当然你不想要一般的注释或空格数,所以你不要使用all属性来检索所有节点,但你需要指定你想要的节点类型让我们说我们需要所有的元素,属性和文本因此我们应该运行以下命令:
int size = xnav.SelectDescendants(XPathNodeType.Attribute | XPathNodeType.Element | XPathNodeType.Text , true).Count;
我认为您需要对属性的值进行计数,因此您必须将属性的结果加倍,因为它不能像这样指定节点的类型,所以我做了以下内容:
int size = (xnav.SelectDescendants(XPathNodeType.Attribute, true).Count * 2) +
xnav.SelectDescendants(XPathNodeType.Element, true).Count +
xnav.SelectDescendants(XPathNodeType.Text , true).Count;
目前我拥有以上所有的计数,但属性我没有计算。
HEEELLLPPP !!!请
P.S。我不想经历循环到元素这样做是非常昂贵的。
答案 0 :(得分:1)
如果您真的担心性能,则应该使用XmlReader直接执行此操作,而不是执行所有这些XPath查询。它还可以让您一次跟踪所有计数,而不是执行多个文档范围的查询。
答案 1 :(得分:0)
我将从字符串
手动完成<img src="" style="" width=""/>
只计算“=”符号即可
答案 2 :(得分:0)
您可以使用xpath查找有多少属性
XmlDocument doc = new XmlDocument();
doc.Load(txtFileName.Text.Trim());
XPathNavigator xnav = doc.CreateNavigator();
xnav.Evaluate("count(//@*)");