首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理'p‘元素中的’下划线‘

如何处理'p‘元素中的’下划线‘
EN

Stack Overflow用户
提问于 2020-09-05 12:09:58
回答 1查看 93关注 0票数 0

如何处理p标记中的下划线。这是我正在做的代码。有人能帮我解决这个问题吗。

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

输入XML:

代码语言:javascript
复制
<?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>

预期输出:

代码语言:javascript
复制
<?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代码:

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 12:46:30

我将使用analyze-string (在XSLT 3中)或xsl:analyze-string (在XSLT 2中),下面是XSLT 3的示例:

代码语言:javascript
复制
<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具有子元素,则可能需要在文本节点上匹配:

代码语言:javascript
复制
<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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63753735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档