我们如何使用shell代码将2种模式之间的内容转换为特定格式?以<Mapping>
开头并以</Mapping>
结尾的以下示例XML需要转换为计划格式代码,如下所示。
示例输入代码:
<Mapping name="temp1"> /*rule name will the value of Mapping name*/
<phpCode>
boolean_out = copyfunc temp /*rule content output */
</phpCode>
</Mapping>
name
的值将是规则名称,boolean_out
的值将是规则内容。
示例输出代码:
rule temp1 { // temp1 is the mapping value
copyfunc temp //boolean_out value is rule content
}
答案 0 :(得分:2)
给定input.xml包含:
<Mapping name="temp1"> /*rule name will the value of Mapping name*/
<phpCode>
boolean_out = copyfunc temp /*rule content output */
</phpCode>
</Mapping>
包含:
的transform.xsl<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" indent="no" />
<xsl:template match="Mapping">
<xsl:text>rule </xsl:text>
<xsl:value-of select="@name" />
<xsl:text> { // </xsl:text>
<xsl:value-of select="@name" />
<xsl:text> is the mapping value</xsl:text>
<xsl:apply-templates select="./phpCode" mode="php-code" />
<xsl:text>
}
</xsl:text>
</xsl:template>
<xsl:template match="*" mode="php-code">
<xsl:text>
 </xsl:text>
<xsl:value-of select="substring-before(substring-after(normalize-space(text()),'= '),'/*')" />
<xsl:text>//</xsl:text>
<xsl:value-of select="substring-before(normalize-space(text()),'=')" />
<xsl:text> value is rule content</xsl:text>
</xsl:template>
</xsl:stylesheet>
XSLT转换产生:
rule temp1 { // temp1 is the mapping value
copyfunc temp //boolean_out value is rule content
}
调用转换的方法是平台和工具特定的。虽然有许多方法可以运行XSL脚本,但命令行工具可用于调用转换。例如,xsltproc
命令是:
xsltproc transform.xsl input.xml
可以类似地使用msxsl.exe
,但命令参数是相反的。