我有一个包含许多<message>
块的xhtml文件,除了出现在几个地方的单个标识符##IDENTIFIER##
之外,这些块都是相同的。注意:##IDENTIFIER##
是此消息块中使用的纯文本值的占位符。
<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##"/>
。
这有可能做到吗?如果是这样,有什么好方法可以做到这一点呢?我已经开始研究模式和实体引用,但我还不太了解它们,我甚至不确定它们是否能提供我正在寻找的行为。
编辑:我也希望这可以在同一文件中完成,但我可以添加其他文件,如果必要的话。
发布于 2018-08-04 03:45:47
我想要做的是做一个自定义标记,我可以用它来替换上面的代码块,比如::
<mymessage value="##IDENTIFIER##"/>
您可以使用XSLT ( 1.0版就足够了)做到这一点。将XML作为输入提供给样式表,以将其转换为所需的输出。
例如,如果您有一些XML (例如,命名为a.xml
),如
<?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
)
<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>
将产生以下输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<mymessage value="##IDENTIFIER003##"/>
<mymessage value="##IDENTIFIER001##"/>
<mymessage value="##IDENTIFIER002##"/>
</root>
您可以使用任何XSLT处理器来完成此任务。
例如,在Linux中,可以像这样使用xsltproc
。
xsltproc a.xslt a.xml
对于Windows,也有大量的XSLT处理器,只要谷歌一下就可以了。
https://stackoverflow.com/questions/51678913
复制相似问题