使用XPath访问XML中特定的注释

时间:2015-08-18 11:49:17

标签: xml xpath

我有一个XML,我想找到评论中所有粗体的元素(第二次出现评论)。

为此,我写了一个xpath:

输入/ a / b [@Name =' FULLTEXT'] / comment()[包含(。,' START OF CUSTOMIZATIONS')] / following :: * [not( preceding :: comment()[contains(。,' END OF CUSTOMIZATIONS')])

但是,不知怎的,它不起作用。知道xpath有什么问题吗?

<Type>
    <a>
        <!--START OF CUSTOMIZATIONS-->
        <c />
        <!--END OF CUSTOMIZATIONS-->
        <b Name="FULLTEXT">
             <c />
             <c />
             <c />
             <c />
             <c />

             **<!--START OF CUSTOMIZATIONS-->
             <c />
             <c />
             <c />
             <!--END OF CUSTOMIZATIONS-->**
             <c />
        </b>
    </a>
</Type>

1 个答案:

答案 0 :(得分:0)

使用following-siblingpreceding-sibling代替followingpreceding(为了便于阅读而包装):

Type/a/b[@Name='FULLTEXT']
/comment()[contains(.,'START OF CUSTOMIZATIONS')]
/following-sibling::*[not(preceding-sibling::comment()[contains(.,'END OF CUSTOMIZATIONS')])]

使用not(preceding-sibling::comment()[contains(.,'END OF CUSTOMIZATIONS')])所有c个元素都会被过滤掉,因为它们都有前面的注释节点,这是第一次出现<!--END OF CUSTOMIZATIONS-->