使用XSLT更改XML值

时间:2015-05-20 12:14:33

标签: java xslt

我有:

<parent>
    <groupId>com.test.example</groupId>
    <artifactId>myProject</artifactId>
    <version>00.01.00.00</version>
</parent>

我想要什么

<parent>
    <groupId>com.test.example</groupId>
    <artifactId>parameter1</artifactId>
    <version>parameter2</version>
</parent>

所以我创建了一个Java GUI,我在其中放置了我的参数(这只是按钮事件代码):

    private void btnModifyActionPerformed(ActionEvent e) {
    String strArtifactID = txtArtifactID.toString();
    int iVersion = new Integer(txtVersion.getText());


    Source xmlInput = new StreamSource(new File("c:/Users/balestrierih/Desktop/pomReplace.xml"));
    Source xsl = new StreamSource(new File("c:/Users/balestrierih/Desktop/pomReplace.xsl"));
    Result xmlOutput = new StreamResult(new File("c:/Users/balestrierih/Desktop/output.xml"));

    try {
        Transformer transformer = TransformerFactory.newInstance().newTransformer(xsl);
        transformer.transform(xmlInput, xmlOutput);
    } catch (TransformerException TE) {
        TE.getMessage();
    }

}

它将启动XSL代码:

    <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="artifactID">
        <xsl:param name="strArtifactID"/>
        <xsl:apply-templates select="($strArtificatID)"/>
 </xsl:template>

 <xsl:template match="version">
        <xsl:param name="iVersion"/>
        <xsl:apply-templates select="($iVersion)"/>
</xsl:template>
</xsl:stylesheet>

但是当我启动我的程序时,我收到一条错误,指出XSLT代码不正确

1 个答案:

答案 0 :(得分:0)

我认为你需要全局参数(假设你想在运行转换之前将它们设置为值)然后你只需要将参数值放入你想用XSLT操作的元素中:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>

  <xsl:param name="strArtifactID"/>
  <xsl:param name="iVersion"/>

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

  <xsl:template match="artifactId">
    <xsl:copy>
      <xsl:value-of select="$strArtifactID"/>
    </xsl:copy>

  </xsl:template>

  <xsl:template match="version">
    <xsl:copy>
      <xsl:value-of select="$iVersion"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

现在您可以设置参数和名为artifactId的元素(注意拼写差异),并使用传入的参数值填充version