Xml 查找到某一点的元素
我有一个XPath问题。我需要对Xml 查找到某一点的元素,xml,xslt,xpath,xslt-2.0,Xml,Xslt,Xpath,Xslt 2.0,我有一个XPath问题。我需要对中包含的任何进行测试,但不需要对中包含的任何进行测试。请注意,包含在中 XML: 添加标题 这里有一些文字 这里有更多的文字 添加另一标题 更多文本 标题 标题 添加iframe内容 添加章节标题 这里有一些章节文本 标题 标题 添加更多iframe内容 添加标题 这里有一些文字 这里有更多的文字 添加另一标题 更多文本 添加章节标题 这里有一些章节文本 标题 标题 添加更多iframe内容 XSLT: 我得到这个结果: <manifest>
中包含的任何
进行测试,但不需要对
中包含的任何
进行测试。请注意,
包含在
中
XML:
添加标题
这里有一些文字
这里有更多的文字
添加另一标题
更多文本
标题
标题
添加iframe内容
添加章节标题
这里有一些章节文本
标题
标题
添加更多iframe内容
添加标题
这里有一些文字
这里有更多的文字
添加另一标题
更多文本
添加章节标题
这里有一些章节文本
标题
标题
添加更多iframe内容
XSLT:
我得到这个结果:
<manifest>
<item id="p1" properties="remote-resources"/>
<item id="p2" properties="remote-resources"/>
</manifest>
但我只想:
<manifest>
<item id="p1" properties="remote-resources"/>
</manifest>
因为在
中没有直接的
,也没有嵌套在
中。但是,当我的XPath将选择
中的任何
时,我不确定如何实现这一点(其中包括
中的那些)
我需要选择
中包含的任何
,但不需要选择
中包含的任何
那么:
/book/part//iframe[not(ancestor::chapter)]
补充: 如果要从
部分
的上下文中测试,如果当前部分
包含任何不是章节
后代的iframe
元素,请执行以下操作:
<xsl:template match="/book">
<manifest>
<xsl:for-each select="part">
<item id="{@id}">
<xsl:if test=".//iframe[not(ancestor::chapter)]">
<!-- code if true -->
</xsl:if>
</item>
</xsl:for-each>
</manifest>
</xsl:template>
Demo:您询问选择
iframe
s,但您的XSLT选择了part
s?我应该将其更改为“test”条件。不幸的是,这没有得到我的预期输出。我仍然得到两个元素。对不起,你指的是什么
元素?你是指
元素吗?如果你是指项元素,你得到两个,因为你的输入中有两个部分
元素;你的测试是在你创建了e item`。很抱歉,我指的是两个带有properties=“remote resources”的项目。不过,iframe[not(祖先::章节)]的这个新选项起到了作用!非常感谢!
/book/part//iframe[not(ancestor::chapter)]
<xsl:template match="/book">
<manifest>
<xsl:for-each select="part">
<item id="{@id}">
<xsl:if test=".//iframe[not(ancestor::chapter)]">
<!-- code if true -->
</xsl:if>
</item>
</xsl:for-each>
</manifest>
</xsl:template>