Xml XSL选择父节点中的文本,其中包含除一个特定子节点之外的所有子节点
我对XML和XSL有问题, 这是我的XML文档的一部分:Xml XSL选择父节点中的文本,其中包含除一个特定子节点之外的所有子节点,xml,xslt,select,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> <
<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>
节点3内的文本我不想选择
我要选择的节点2中的文本
节点4中的文本我要选择
node2内部有一些文本和两个子节点(node3和node4),我需要选择node2中包含的文本,其中除了一个子节点外,还有子节点4中的文本
在节点3中。
我还说node2的结构并不总是相同的,有时它只有一些文本,或者可能有一些带有node3和/或node4的文本。
此外,节点2中元素的顺序可能并不总是相同的,但结果的顺序应该与XML的顺序相同
感谢您的帮助。从
node2
上下文开始,您可以使用
.//text()[not(parent::node3)]
或者更一般地说,ifnode3
可能有子元素
<node2>
keep this
<node3>drop this <node7>drop this too</node7></node3>
<node4>keep this</node4>
</node2>
我试着测试你的第一个解决方案,但它似乎不能正常工作。就像在我的示例中一样,它选择节点2内的文本,但不选择节点4内的文本。我也测试了第二个解决方案,但它显示了相同的问题。@GiulioBambini这取决于“不选择”的含义-记住此表达式将返回一组文本节点,并且(在XSLT 1.0中)如果尝试获取节点集的
值,则得到的只是文档顺序集中第一个节点的字符串值,而忽略集中的其余节点。要获得所有这些值,通常使用应用模板
或副本
,而不是值
,例如
.//text()[not(ancestor::node3)]