XSL在父节点中选择包含除一个特定子节点之外的所有子节点的文本

时间:2014-04-15 15:03:13

标签: xml xslt select

我遇到了XML和XSL的问题, 这是我的XML文档的一部分:

<node1>
    <node2>
        <node3>text inside node3 I don't want select</node3>
        text inside node2 that I want select
        <node4> text in node4 I want select</node4>
    </node2>
</node1>

node2里面有一些文本和2个子节点(node3和node4),我需要用子节点4中的文本选择node2中包含的文本除了一个 在node3中。 我还说node2的结构并不总是相同,有时它只有一些文本,或者可能有一些带有node3和/或node4的文本。 此外,node2中元素的顺序可能并不总是相同,但结果的顺序应该与XML的顺序相同。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

node2上下文开始,您可以使用

获取除node3内的所有后代文本节点
.//text()[not(parent::node3)]

或更一般地说,如果node3可能包含子元素

<node2>
   keep this
   <node3>drop this <node7>drop this too</node7></node3>
   <node4>keep this</node4>
</node2>

然后使用ancestor:: instead of parent ::`

.//text()[not(ancestor::node3)]