当前位置: 首页 > 知识库问答 >
问题:

如何处理“p”元素中的“下划线”

涂玉韵
2023-03-14

如何处理p标签中的下划线。这是我正在工作的代码。有人能帮我克服这个问题吗?

输入XML和XSLT代码:https://xsltfiddle.liberty-development.net/a9HjZX/1

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>Number of Shares: _______</p>
<p>__________ Name of Company.</p>
<p>Number of Shares: _______Type of Stock: ________________</p>
<p>Certificate No: __________Company.</p>
</root>

预期输出:

<?xml version="1.0" encoding="UTF-8"?><root>
    <p>Number of Shares: <inline-supplementary-material content-type="7_sld">_______</inline-supplementary-material></p>
    <p><inline-supplementary-material content-type="10_sld">__________</inline-supplementary-material> Name of Company.</p>
    <p>Number of Shares: <inline-supplementary-material content-type="7_sld">_______</inline-supplementary-material>Type of Stock: <inline-supplementary-material content-type="16_sld">________________</inline-supplementary-material></p>
    <p>Certificate No: <inline-supplementary-material content-type="10_sld">__________</inline-supplementary-material> Company.</p>
</root>

XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">

<xsl:template match="root">
    <root>
        <xsl:apply-templates/>
    </root>
</xsl:template>

<xsl:template name="GetNoOfOccurance">
    <xsl:param name="String"/>
    <xsl:param name="SubString"/>
    <xsl:param name="Counter" select="0" />
    <xsl:variable name="sa" select="substring-after($String, $SubString)" />
    <xsl:choose>
        <xsl:when test="$sa != '' or contains($String, $SubString)">
            <xsl:call-template name="GetNoOfOccurance">
                <xsl:with-param name="String"    select="$sa" />
                <xsl:with-param name="SubString" select="$SubString" />
                <xsl:with-param name="Counter"   select="$Counter + 1" />
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$Counter" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

    <xsl:template match="p[parent::*]">
    <xsl:element name="{local-name(.)}">
        <xsl:apply-templates select="@*"/>
        <xsl:variable name="num">
            <xsl:call-template name="GetNoOfOccurance">
                <xsl:with-param name="String" select="."/>
                <xsl:with-param name="SubString" select="'_'"/>
            </xsl:call-template>
        </xsl:variable>
.............
    </xsl:element>
</xsl:template>

共有1个答案

余弘毅
2023-03-14

我会使用analyst-string(在XSLT 3中)或xsl: analyst-string(在XSLT 2中),这是XSLT 3示例:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    expand-text="yes"
    version="3.0">

    <xsl:mode on-no-match="shallow-copy"/>
    
    <xsl:template match="p[matches(., '_+')]">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:apply-templates select="analyze-string(., '_+')" mode="match"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="*:match" mode="match">
        <inline-supplemental-material content-type="{string-length()}_sld">{.}</inline-supplemental-material>
    </xsl:template>
    
</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/a9HjZX/2

如果您希望p具有子元素,您可能需要在文本节点上匹配:

<xsl:template match="p[matches(., '_+')]//text()">
    <xsl:apply-templates select="analyze-string(., '_+')" mode="match"/>
</xsl:template>

<xsl:template match="*:match" mode="match">
    <inline-supplemental-material content-type="{string-length()}_sld">{.}</inline-supplemental-material>
</xsl:template>

https://xsltfiddle.liberty-development.net/a9HjZX/3

 类似资料:
  • 问题内容: 除了#myspan元素外,我试图在链接上加下划线,在任何情况下我都不希望下划线。我还想更改#myspan的颜色。该规则似乎不适用于它。如果我颠倒顺序,但未在“ a”下划线但在#myspan下划线,则似乎适用该规则。我已经看到链接的文本装饰和跨此链接无效。 问题答案: 将元素设置为不会受到下划线的影响: 请注意,文本修饰不会传播到浮动和绝对定位的后代,也不会传播到原子内联级别后代(例如内

  • 我试过,但不行。下面是我的代码: null null 它在这里起作用,但对我的VS代码不起作用。这是窃听器吗?

  • 问题内容: 在查看各种PHP库时,我注意到许多人选择在某些类方法的前面加一个下划线,例如 …代替… 我意识到这最终归结于个人喜好,但我想知道是否有人对这种习惯的来历有所了解。 我的想法是,它可能是从PHP 4继承过来的,然后才可以将类方法标记为protected或private,以暗示“不要从类外部调用此方法”。但是,我也想到,它可能起源于我不熟悉的某个地方(一种语言),或者背后有很好的理由让我从

  • HTML会忽略在文本编辑器中输入的回车符合其他额外的空格,要在网页中开始一个新的段落,应该使用p元素(p 是 paragraph 的缩写)。 p元素是一个有特定语义的元素,以 <p> 标签开始,以 </p> 标签结束。但是,当 p元素后紧跟 address、article, aside、blockquote、div、dl、fieldset、footer、form、h1~h6、header、hgro

  • 问题内容: 为什么我们永远不能将元素作为元素的子元素? 我用以下代码制作了一个网页 在这里,元素是p元素的子元素。但是,在所有主流浏览器(Chrome,Firefox和Internet Explorer-所有最新版本)中,其解释如下 我通过右键单击元素(在Chrome中)并选择检查元素选项来对其进行检查。我在Chrome中看到了它,但是其他两个浏览器的行为也相同(CSS选择器“ p ul”无法正常

  • 我有个关于Recrusion的问题。recrusion背后的概念对我来说是清楚的,但是如果我想同时处理两个元素呢。有没有一个简单的方法来处理。 例如: 上面的线对我来说很清楚,但是如果我想要两个过程同时处理两个元素,就像这样: 相互独立地添加每个值。