gpt4 book ai didi

xslt-1.0 - 使用 XPath 选择包含混合内容或仅包含文本的节点

转载 作者:行者123 更新时间:2023-12-04 03:06:27 24 4
gpt4 key购买 nike

使用 XPath 1.0 和 XSLT 1.0 我需要选择混合内容的直接父级或仅选择文本。考虑以下示例:

<table class="dont-match">
<tr class="dont-match">
<td class="match">Mixed <strong class="maybe-match">content</strong> in here.</td>
<td class="match">Plain text in here.</td>
<td class="dont-match"><img src="..." /></td>
</tr>
</table>
<div class="dont-match">
<div class="dont-match"><img src="..." /></div>
<div class="match">Mixed <em class="maybe-match">content</em> in here.</div>
<p class="match">Plain text in here.</p>
</div>

显然 matchmaybe-matchdont-match 类仅用于演示目的,不能用于匹配。 maybe-match 表示最好不要匹配,但我可以自己解决问题,以防万一很难排除。

非常感谢!

最佳答案

“匹配”使用:

//*[text()[normalize-space()] and not(../text()[normalize-space()])]

对于“可能匹配”使用:

//*[../text()[normalize-space()]]

基于 XSLT 的验证:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:copy-of select=
"//*[text()[normalize-space()] and not(../text()[normalize-space()])]"/>
==========
<xsl:copy-of select="//*[../text()[normalize-space()]]"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 时(包装到单个顶级元素中以成为格式良好的 XML 文档):

<t>
<table class="dont-match">
<tr class="dont-match">
<td class="match">Mixed <strong class="maybe-match">content</strong> in here.</td>
<td class="match">Plain text in here.</td>
<td class="dont-match"><img src="..." /></td>
</tr>
</table>
<div class="dont-match">
<div class="dont-match"><img src="..." /></div>
<div class="match">Mixed <em class="maybe-match">content</em> in here.</div>
<p class="match">Plain text in here.</p>
</div>
</t>

计算两个 XPath 表达式中的每一个并将所选节点复制到输出:

<td class="match">Mixed <strong class="maybe-match">content</strong> in here.</td>
<td class="match">Plain text in here.</td>
<div class="match">Mixed <em class="maybe-match">content</em> in here.</div>
<p class="match">Plain text in here.</p>
==========
<strong class="maybe-match">content</strong>
<em class="maybe-match">content</em>

正如我们所见,这两个表达式都完全选择了想要的元素。

关于xslt-1.0 - 使用 XPath 选择包含混合内容或仅包含文本的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com