Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
456 views
in Technique[技术] by (71.8m points)

xml - Combine multiple XSLT templates with similar matches

I have this XSLT below

<xsl:template match="word[@italic = 'y']">
        <p>
                <xsl:attribute name="i">yes</xsl:attribute>
                <xsl:apply-templates/>
        </p>
</xsl:template>

<xsl:template match="word[@bold = 'y']">
        <p>
                <xsl:attribute name="b">yes</xsl:attribute>
                <xsl:apply-templates/>
        </p>
</xsl:template>

<xsl:template match="word[@underline = 'y']">
        <p>
                <xsl:attribute name="u">yes</xsl:attribute>
                <xsl:apply-templates/>
        </p>
</xsl:template>

Is there a way to combine these templates in a single nested block, using a variable that looks something like "italic | bold | underline", while also reflecting the changes in <xsl:attribute name="XXX">? Thanks.

question from:https://stackoverflow.com/questions/65922381/combine-multiple-xslt-templates-with-similar-matches

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The usual approach to combine match patterns is

<xsl:template match="word[@italic = 'y'] | word[@bold = 'y'] | word[@underline = 'y']">

As for transforming the attributes, can't you just use

<xsl:template match="word">
  <p>
    <xsl:apply-templates select="@* | node()"/>
  </p>
</xsl:template>

plus templates for the attributes e.g.

<xsl:template match="word/@italic[. = 'y']">
  <xsl:attribute name="i">yes</xsl:attribute>
</xsl:template>

and so on?

Or perhaps

<xsl:template match="word/@italic[. = 'y'] | word/@bold[. = 'y'] | word/@underline[. = 'y']">
  <xsl:attribute name="{substring(local-name(), 1, 1)}">yes</xsl:attribute>
</xsl:template>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...