<lb>
元素开头。其中一些元素具有属性<lb break="no">
。我需要将逐行文本转换为浮动文本,并在<lb break="no">
之前修剪空格,以便在没有空格的情况下编写单词。同时,有必要保留文本中显示的所有空格,因为有许多不同的标记一个接一个地出现。如果我使用normalize-space()函数,标记之间的所有空格都会丢失,我需要为每个案例编写一个类似<xsl:if test="following-sibling::*[1][self::tei:span]">
<xsl:text> </xsl:text>
的测试。
我该如何解决这个问题?
我发现了这样一个solution
<xsl:template match="text()">
"<xsl:sequence select="replace(., '\s+$', '', 'm')"/>"
</xsl:template>
但我不知道如何在我的案例中使用这样的代码。
以下是示例文本:
<p>
<lb n="3"/>Ich ergreife diese Gelegenheit eine Bitte an Sie zu rich
<lb n="4" break="no"/>ten,<span type="inter" xml:id="GR55024-inter2"> </span> zu <span type="inter" xml:id="GR55024-inter3">die</span> Sie mir<span type="inter" xml:id="GR55024-inter4"> </span> die Aufmunterung durch das güti
<lb n="5" break="no"/>ge Versprechen gaben, <span type="inter" xml:id="GR55024-inter5">im Fall ich Bücher von der Je
<lb n="6" break="no"/>naischen Bibliothek<ptr type="app" target="#GR55024-seite1-les1"/> nöthig haben sollte,</span> mir dieselben
<lb n="7"/>gefälligst zu verschaffen. Ich <span type="inter" xml:id="GR55024-inter6">bedarf</span> jetzt zur Recen
<lb n="8" break="no"/>sion <span type="inter" xml:id="GR55024-inter7">des Buches</span> über <span type="inter" xml:id="GR55024-inter8">die</span> Verwandschaft der <span type="inter" xml:id="GR55024-inter9">griechischen
<lb n="9"/>und deutschen</span> Sprache <span type="inter" xml:id="GR55024-inter10">das <hi rend="unterstrichen">Glossarium von</hi></span> <hi rend="unterstrichen"><persName key="">Hesychius</persName></hi>,
<lb n="10"/><span type="inter" xml:id="GR55024-inter11">edit. Alberti & Ruhnkenii, und</span> <title type="werk" key=""><persName key=""><hi rend="unterstrichen">Corinthius</hi></persName></title>
<lb n="11"/>de dialectis, in der holländ. Ausgabe von <hi rend="unterstrichen"><persName key="">Koen</persName></hi>, <hi rend="unterstrichen">8<hi rend="unterstrichen">°</hi></hi> und
</p>
非常感谢!
我正在使用oXygen XML Editor及其与Saxon 9的XSLT-Debugger。
Xslt模板(不工作)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xpath-default-namespace="http://www.tei-c.org/ns/1.0"
version="2.0">
<xsl:output method="xhtml" indent="yes"/>
<xsl:preserve-space elements="text"/>
<xsl:template match="/">
<html>
<head>
<title>
Title
</title>
</head>
<body>
<div>
<xsl:apply-templates select="//div[@ana='ausfertigung']">
</xsl:apply-templates>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="p">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="p/text()">
<xsl:text> </xsl:text>
</xsl:template>
<xsl:variable name="special-handling" select="text()
[following-sibling::*[1][self::lb[@break='no']]]"/>
<xsl:template match="text()[following-sibling::*[1][self::lb[@break='no']]]">
<xsl:if test="$special-handling/ends-with(text(), '\n')"></xsl:if>
<xsl:value-of select="$special-handling/substring-before(text()[following-sibling::*[1]
[self::lb[@break='no']]],'\n')"></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
找到的初步代码here
<xsl:template match="para/text()">
<xsl:call-template name="selectWithoutBreaks"/>
</xsl:template>
利用这些模板:
<xsl:template name="selectWithoutBreaks" >
<xsl:variable name="linebreak">
<xsl:text>
</xsl:text>
</xsl:variable>
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="."/>
<xsl:with-param name="replace" select="$linebreak" />
<xsl:with-param name="with" select="''"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="replace-string">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="with"/>
<xsl:choose>
<xsl:when test="contains($text,$replace)">
<xsl:value-of select="substring-before($text,$replace)"/>
<xsl:value-of select="$with"/>
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="substring-after($text,$replace)"/>
<xsl:with-param name="replace" select="$replace"/>
<xsl:with-param name="with" select="$with"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
答案 0 :(得分:0)
您希望对文本节点进行特殊处理,后跟带有break="no"
的“lb”元素。您希望在所有其他文本节点中保留空格。所以:
编写一个标识转换,以保留内容中的空白区域。
添加模板以匹配文本节点,紧接着是lb
元素与break="no"
。 (或者在文本节点的现有模板中,将现有代码包装在xsl:choose元素的xsl:otherwise子句中,并在它之前添加xsl:when元素,以便文本节点紧跟一个适当的情况lb元素。
我们需要您的测试选择的文本节点的名称;我们称之为特殊处理文本节点。
如果特殊处理文本节点以换行符结尾,则需要将其删除。使用ends-with()来测试条件,使用substring()来执行更改。 (如果你想在结尾处删除多个换行符但是保持所有其他空格不变,那么你的任务就会稍微复杂一些。)