1.1.2.11. fejezet, Függőségek összehasonlítása XSLT és bash shell script-el

A pom.xml-ben tárolt dependency tagok kiszűrését XSLT-vel a legegyszerűbb megoldani. A kiszűrt eredmények összehasonlítást pedig bash shell script-el lehet segíteni.

A pom.xml-t átalakító dependencies.xsl fájl:

<?xml version="1.0" encoding='utf-8'?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:t="http://maven.apache.org/POM/4.0.0"
  xmlns:html="http://www.w3.org/TR/REC-html40" version="1.0">
  <xsl:template match="/">
    <xsl:for-each select="t:project/t:dependencies/t:dependency">
      <xsl:value-of select="t:groupId"/><xsl:text>&#9;</xsl:text>
      <xsl:value-of select="t:artifactId"/><xsl:text>&#10;</xsl:text>
    </xsl:for-each> 
  </xsl:template>
</xsl:stylesheet>

Érdemes megfigyelni a xmlns:t névtér definiálását. Ha ezt elfelejtjük, az xsl névtért használná a transzformáció, és ez eredménytelen lenne. A transzformáció az xsltproc programmal végezhető Linuxon:

xsltproc dependencies.xsl pom.xml

Ha Java-val transzformáljuk, a következő kód segít:

    public static String transformWithXSL(String[] args) {
        File xsltFile = new File(args[0]); //dependencies.xsl
        File xmlFile = new File(args[1]); //pom.xml
 
        javax.xml.transform.Source xmlSource = new javax.xml.transform.stream.StreamSource(xmlFile);
        javax.xml.transform.Source xsltSource = new javax.xml.transform.stream.StreamSource(xsltFile);
        StringWriter xsltResult = new StringWriter();
        javax.xml.transform.Result result = new javax.xml.transform.stream.StreamResult(xsltResult);
 
        javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory.newInstance();
        javax.xml.transform.Transformer trans;
        try {
            trans = transFact.newTransformer(xsltSource);
            trans.transform(xmlSource, result);
        } catch (TransformerException e) {
            e.printStackTrace();
        }
 
        return xsltResult.toString();
    }

A sort paranccsal pedig érdemes betű sorrendbe tenni az eredményt, úgy könnyen összehasonlítható a lista.