如何使用shell

时间:2015-05-05 11:35:03

标签: shell awk sed gawk

我们如何使用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
}

1 个答案:

答案 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>&#x0a;}&#x0a;</xsl:text>
</xsl:template>

<xsl:template match="*" mode="php-code">
  <xsl:text>&#x0a;  </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,但命令参数是相反的。