Search code examples
xmlxsltantant-contrib

Updating xml elements using ant


I have an XSL file, which acts as a configuration file for my application. In fact it is an XML file, which has the elements wrapped around it. This file is called Config.xsl:

<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"           xmlns="http://www.example.org/Config">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"               standalone="yes" />
 <xsl:template match="/">
 <Config>
      <Test>somevalue</Test>
      <Test1>someothervalue</Test1>
 </Config>
 </xsl:template>

I would like the change the value of element Test1 with a newvalue.

Below is my ant code, which I am using to update the values.

<?xml version="1.0" encoding="UTF-8" ?>
<project name="Scripts" default="test">
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<target name="test">
    <xmltask source="Config.xsl" dest="Config.xsl">
        <replace path="Config/Test1/text()" withText="newvalue" />
    </xmltask>
</target>
</project>

I would appreciate if anyone can let me know how to get this work.


Solution

  • It seems you are confused with namespace. You must handle it before replacing anything. For more details how XML Task handle it goto https://today.java.net/pub/a/today/2006/11/01/xml-manipulation-using-xmltask.html#paths-and-namespaces. However, you may used this code to get our desired output:

    input:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="http://www.example.org/Config">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" standalone="yes"/>
      <xsl:template match="/">
        <Config>
          <Test>somevalue</Test>
          <Test1>someothervalue</Test1>
        </Config>
      </xsl:template>
    </xsl:stylesheet>
    

    ANT script:

    <project name="XML-VALIDATION" default="main" basedir=".">
      <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
      <target name="main">
        <xmltask source="config.xsl" dest="output.xml">
          <replace path="//:Config/:Test1/text()">xxxxxxx</replace>
        </xmltask>
      </target>
    </project>
    

    output:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.example.org/Config" version="1.0">
      <xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="yes" version="1.0"/>
      <xsl:template match="/">
        <Config>
          <Test>somevalue</Test>
          <Test1>xxxxxxx</Test1>
        </Config>
      </xsl:template>
    </xsl:stylesheet>