首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自定义xhtml标签,减少重复块

自定义xhtml标签,减少重复块
EN

Stack Overflow用户
提问于 2018-08-04 03:21:53
回答 1查看 20关注 0票数 0

我有一个包含许多<message>块的xhtml文件,除了出现在几个地方的单个标识符##IDENTIFIER##之外,这些块都是相同的。注意:##IDENTIFIER##是此消息块中使用的纯文本值的占位符。

代码语言:javascript
复制
<message id="##IDENTIFIER##">
    <div class="box">
        <div class="box-header">
            <div class="box-title">
                <h3 class="box-title-text">Title</h3>
            </div>
            <div class="button">
                ${specialblock: "##IDENTIFIER##"}
            </div>
        </div>
        <div class="edit">
            ${##IDENTIFIER##: "data"}
        </div>
    </div>
</message>

我希望能够做的是制作一个自定义标记,我可以用它来替换上面的代码块,比如:<mymessage value="##IDENTIFIER##"/>

这有可能做到吗?如果是这样,有什么好方法可以做到这一点呢?我已经开始研究模式和实体引用,但我还不太了解它们,我甚至不确定它们是否能提供我正在寻找的行为。

编辑:我也希望这可以在同一文件中完成,但我可以添加其他文件,如果必要的话。

EN

回答 1

Stack Overflow用户

发布于 2018-08-04 03:45:47

我想要做的是做一个自定义标记,我可以用它来替换上面的代码块,比如::

代码语言:javascript
复制
<mymessage value="##IDENTIFIER##"/>

您可以使用XSLT ( 1.0版就足够了)做到这一点。将XML作为输入提供给样式表,以将其转换为所需的输出。

例如,如果您有一些XML (例如,命名为a.xml),如

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <message id="##IDENTIFIER003##">
        <div class="box">
            <div class="box-header">
                <div class="box-title">
                    <h3 class="box-title-text">Title</h3>
                </div>
                <div class="button">
                    ${specialblock: "##IDENTIFIER##"}
                </div>
            </div>
            <div class="edit">
                ${##IDENTIFIER##: "data"}
            </div>
        </div>
    </message>
    <message id="##IDENTIFIER001##">
        <div class="box">
            <div class="box-header">
                <div class="box-title">
                    <h3 class="box-title-text">Title</h3>
                </div>
                <div class="button">
                    ${specialblock: "##IDENTIFIER##"}
                </div>
            </div>
            <div class="edit">
                ${##IDENTIFIER##: "data"}
            </div>
        </div>
    </message>
    <message id="##IDENTIFIER002##">
        <div class="box">
            <div class="box-header">
                <div class="box-title">
                    <h3 class="box-title-text">Title</h3>
                </div>
                <div class="button">
                    ${specialblock: "##IDENTIFIER##"}
                </div>
            </div>
            <div class="edit">
                ${##IDENTIFIER##: "data"}
            </div>
        </div>
    </message>    
</root>

应用以下XSLT (例如,命名为a.xslt)

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />

  <!-- identity template -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="message">
    <mymessage value="{@id}" />
  </xsl:template>

</xsl:stylesheet>

将产生以下输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<root>
    <mymessage value="##IDENTIFIER003##"/>
    <mymessage value="##IDENTIFIER001##"/>
    <mymessage value="##IDENTIFIER002##"/>        
</root>

您可以使用任何XSLT处理器来完成此任务。

例如,在Linux中,可以像这样使用xsltproc

代码语言:javascript
复制
xsltproc a.xslt a.xml

对于Windows,也有大量的XSLT处理器,只要谷歌一下就可以了。

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

https://stackoverflow.com/questions/51678913

复制
相关文章

相似问题

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