如何在</Underline>标签后检查换行符(&#10)并需要替换为xslt代码中的<br/>标签

Posted

技术标签:

【中文标题】如何在</Underline>标签后检查换行符(&#10)并需要替换为xslt代码中的<br/>标签【英文标题】:How to check line feed(&#10) after</Underline>Tag and need to replace with to <br/> tag in xslt code 【发布时间】:2020-03-05 04:16:14 【问题描述】:

我有 XML 文件需要使用 XSLT 代码转换成 html

请参考 XML 文件:

<?xml version="1.0" encoding="UTF-8"?><Lesson><Title>Merged Words_G1L5</Title><IntroBlock><ParaBlock><RichText>Materials: Exercise books and pencils</RichText></ParaBlock></IntroBlock><Topic><Title>Underlines – 15 minutes</Title><ParaBlock><CustomNote><SimpleBlock><RichText>
<Underline>ACHIEVE</Underline>
Fill in the Blank: go, wear, quiet, bus, I
1. the pupils are _____.
2. My parents are _____.
3. This school is a _____.
4. ____ am very tall.
5. They _____ sandals.</RichText></SimpleBlock></CustomNote></ParaBlock></Topic></Lesson>

通常换行( )会从我现有的代码转换为&lt;br/&gt;标签

现有代码: 1.检查换行并替换为&lt;br/&gt;标签时:

<xsl:template match="text()">
            <xsl:param name="text" select="."/>

            <xsl:variable name="starttext" select="substring-before(concat($text,'&#10;'),'&#10;')" />
            <xsl:variable name="nexttext" select="substring-after($text,'&#10;')"/>

            <xsl:if test="normalize-space($starttext)">
                <xsl:value-of select="$starttext"/>
                <xsl:if test="normalize-space($nexttext)">
                    <br />
                </xsl:if>
            </xsl:if>
    <xsl:if test="contains($text,'&#10;')">
                <xsl:apply-templates select=".">
                    <xsl:with-param name="text" select="$nexttext"/>
                </xsl:apply-templates>
            </xsl:if>
        </xsl:template>

现有代码:2.与下划线相关:

<xsl:template match="Underline">
        <xsl:if test="text() or *">
            <u>
                <xsl:apply-templates/>
            </u>
        </xsl:if>
    </xsl:template>

现有代码:3. 与富文本相关:

<xsl:template match="RichText">
    <xsl:if test="text() or *">
      <p>
        <xsl:apply-templates/>
      </p>
    </xsl:if>
  </xsl:template>

上面提到的是我现有的代码。 我需要一个解决方案来解决如何在&lt;/Underline&gt; 标记和&lt;RichText&gt; 下的&lt;/UnderLine&gt; 标记之后检查换行符( ),因为正常情况下我的代码工作正常,但仅导致当&lt;/UnderLine&gt; 标签位于&lt;RichText&gt; 之下时 任何人,请建议我如何在我的代码中的 &lt;/UnderLine&gt; 标记之后检查换行符( ) ?????.

当前问题: Current Issue


所需输出: Required Output

【问题讨论】:

【参考方案1】:

您在以下条件下输出&lt;br /&gt;

<xsl:if test="normalize-space($starttext)">

当文本以换行符开头时,此条件不成立 - 就像在您的示例中那样。如果要保留开头的换行符,请删除条件。

【讨论】:

感谢您的建议,如果我删除此条件,那么如何处理这种情况 - “当文本以换行符开头时”我如何检查“ 标签的任何具体解决方案都属于 标签和 之后的换行,你能建议吗? Underline 之后的换行符已经存在。你是删除它的人。 感谢 Michael 的建议,知道如何在 if 条件下检查 并将 替换为“”。因为我需要专门检查这个东西请建议?还有代码序列?我对 XSLT 代码很陌生,请帮帮我... 我们好像在绕圈子。 因为我需要在同一个代码中检查这两个条件,一些文件需要这个代码,而其他一些文件有 条件,但是第一个条件覆盖到第二个条件。我如何在同一代码中管理两者。

以上是关于如何在</Underline>标签后检查换行符(&#10)并需要替换为xslt代码中的<br/>标签的主要内容,如果未能解决你的问题,请参考以下文章

html中常用的标签小结

Markdown - 如何给文本加下划线

使用CSS去除链接下划线

如何为动态生成的<a>标签添加事件 ,只有点击时触发?

DOM 解析器:仅删除某些属性

HTML连载15-文本属性&颜色控制属性