Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSL选择父节点中的文本,其中包含除一个特定子节点之外的所有子节点_Xml_Xslt_Select - Fatal编程技术网

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

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> <

我对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>

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


感谢您的帮助。

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

.//text()[not(parent::node3)]
或者更一般地说,if
node3
可能有子元素

<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)]