2016-08-25 57 views
0

这是XElementDim oTaget=如何计算XElement的所有标签?

<target xmlns="urn:oasis:names:tc:xliff:document:1.2"> 
    <mrk mtype="seg" mid="1082">■ <x id="8746" /><g id="8747">Store the product ./g></mrk> 
    <g id="8747"> 
    <mrk mtype="seg" mid="1083">For this purpose</mrk> 
    </g> 
</target> 

我想计数标签mrk

Dim sentenchild As IEnumerable(Of XElement) 
sentenchild = oTaget.XPathSelectElements(dNS + ":mrk", namespaceManager) 
Return sentenchild.Count 

但结果= 1

如何计算所有标签的oTagetmrk? 谢谢大家。

回答

1

使用.//element图案到上下文元件内返回所有元件XPath 1.0 speC# 2.5 Abbreviated Syntax

.//para选择上下文节点

的另一种方式的para元件后代使用Descendants()方法:

Dim dNS As XNamespace = "urn:oasis:names:tc:xliff:document:1.2" 
sentenchild = oTaget.Descendants(dNS + "mrk") 
1

由于XPath您设置为选择元素,因此您的结果数是1,因为这些元素仅计算target的第一个子级中的mrk元素。您必须对target的所有子元素进行递归迭代。

编辑:

在VB.NET递归实施例在这里看到:

sentenchild = oTaget.XPathSelectElements(".//" + dNS + ":mrk", namespaceManager) 

引自:http://www.dotnetperls.com/recursion-vbnet

+0

无法我们选择的多层次? –

+0

不,这是不可能的。使用'XElement.Elements(XName)'来选择每个子级别的匹配元素(https://msdn.microsoft.com/de-de/library/bb348975(v=vs.110).aspx) – rbr94