gpt4 book ai didi

html - 将最后一个空间从混合内容节点移动到外部节点

转载 作者:行者123 更新时间:2023-11-28 03:26:10 24 4
gpt4 key购买 nike

我有大量由 MS Word 创建的 HTML 文件。我正在尝试操纵这些文件的内容以提取数据和诸如此类的东西。

HTML 段落包含混合内容,我发现斜体或粗体字后的空格通常也是斜体。当我稍后 normalize-space() 时,空间被剥离并且单词被连接起来,不应该被连接起来。

<p>Some text here and some <i>italicized </i>text here.</p>

后来的改造导致这个变成

<p>Some text here and some <i>italicized</i>text here.</p>

(我有点简化了事情。)

我想结束

<p>Some text here and some <i>italicized</i> text here.</p>

我想识别元素内的最后一个节点是以空格结尾的文本节点的情况,去除尾随空格,并在元素后添加一个空格。

我想我可以拼凑一些东西,但 XQuery 越来越麻烦,我不得不想有更简单的方法。 (可能没有,但如果我不问我就傻了......)

XSLT, finding out if last child node is a specific element看起来很接近,但并不十分接近。

最佳答案

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<!--Match the elements who's last child node is a text() node
that ends with a space. -->
<xsl:template match="*[node()[last()]
[self::text()[substring(.,string-length())=' ']]]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<!--add the extra space following the matched element-->
<xsl:text> </xsl:text>
</xsl:template>

<!--Match the text() node that is the last child node of an element
and ends with a space -->
<xsl:template match="*/node()[last()]
[self::text()[substring(., string-length())=' ']]">
<!--remove the trailing space-->
<xsl:value-of select="substring(., 0, string-length())"/>
</xsl:template>

</xsl:stylesheet>

关于html - 将最后一个空间从混合内容节点移动到外部节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21033654/

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