2016-08-25 63 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