如何解决xslt 删除特定元素周围的空白xml 到 xml
我有很多 XML 文件,其中从数据库导出通过缩进添加了某些空格,现在我希望在 XSLT 3.0 转换中将其删除为新的 xml 输出。我想删除 <lb>
和 <pb>
周围导出引入的空格(在原始文件中,在导出之前,这两个元素与没有空格的其他元素相邻 - 导出中的一个隐藏错误使它们缩进)。
这是要转换的问题文件的示例:
<p xml:id="MS609-0783-LA" xml:lang="LA">
<seg type="dep_event" xml:id="MS609-0783-1">
<pb n="58r"/>
<lb n="1"/>Item.
<date type="deposition_date" when="1245-07-07">Anno Domini M°CC°XL°V° Nonas Iulii</date><persName
nymRef="#ber_r_baz-hg" role="dep">Ber. R.</persName> testis juratus dixit quod vidit
<persName nymRef="#heretics_in_public" ref="her">hereticos</persName>.</seg>
</p>
此处是所需 XML 输出的示例:
<p xmlns="http://www.tei-c.org/ns/1.0" xml:id="MS609-0783-LA" xml:lang="LA">
<seg type="dep_event" xml:id="MS609-0783-1"><pb n="58r"/><lb n="1"/>Item.
<date type="deposition_date" when="1245-07-07">Anno Domini M°CC°XL°V° Nonas Iulii</date> <persName
nymRef="#ber_r_baz-hg" role="dep">Ber. R.</persName> testis juratus dixit quod vidit
<persName nymRef="#heretics_in_public" ref="her">hereticos</persName>.</seg>
</p>
我天真地以为我可以这样定位:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tei="http://www.tei-c.org/ns/1.0"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()[normalize-space(.) = '']">
<xsl:choose>
<xsl:when test="./following-sibling::tei:pb">
<xsl:text/>
</xsl:when>
<xsl:when test="./following-sibling::tei:lb">
<xsl:text/>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
但它没有产生想要的结果:https://xsltfiddle.liberty-development.net/93nwMpi
理想情况下,我正在努力寻找一种解决方案,在 <pb>
和/或 <lb>
之前或之后去除任何空白空间(当它们与其他元素相邻时) ),在 <seg>
或其后代中的任何位置。
非常感谢您的指点。
解决方法
我不清楚您要删除哪些文本节点,但是
pip install pandas
将仅去除空白,后跟 <xsl:template match="tei:seg//text()[not(normalize-space())][following-sibling::node()[1][self::tei:pb | self::tei:lb]]"/>
或 pb
内的 lb
。
当然,您可以将其扩展到那些元素前面的元素,例如
seg
如果基于匹配模式的简单阻塞还不够,您可能想尝试是否可以用 <xsl:template match="tei:seg//text()[not(normalize-space())][preceding-sibling::node()[1][self::tei:pb | self::tei:lb] or following-sibling::node()[1][self::tei:pb | self::tei:lb]]"/>
和 group-adjacent
以某种方式表达“邻接”的定义,然后删除任何空白节点在一个组中,例如
xsl:for-each-group
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。