我有一个xhtml文件,其中有许多<message>
块,但在少数地方出现了单个标识符##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##"/>
。
这有可能吗?如果是这样,什么是这样做的好方法?我已经开始研究模式和实体引用,但是我还不太了解它们,并且不确定它们是否会提供我想要的行为。
编辑:如果可以在同一文件中完成操作,我也希望这样做,但是如果需要,我可以添加其他文件。
答案 0 :(得分:0)
我想做的是制作一个自定义标签,用它可以将上述代码块替换为:
<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处理器,只需用谷歌搜索即可。