Vraiment ? Je trouve ça très difficile à croire.
Tu dis que la valeur en question, lue à partir du fichier XML, est lue en faisant :
final String value = getValue(Element);
C'est bien ça ? Est-ce qu'on peut voir cette fameuse méthode getValue() ? Si ce que tu dis est vrai, elle fait des choses vraiment horribles.
Au fait, pour transmettre des balises d'un fichier à un autre, tu ne peux pas utiliser une String, il faut garder les objets sous leur forme XML : Text et Element, peut-être dans une List ou bien simplement conserver l'Element qui les contient.
Et il n'est pas vraiment possible de passer par XMLStreamWriter. Il vaut mieux charger le DOM du document lu, fabriquer un DOM du document à écrire, dans lequel on peut import des éléments du DOM lu, et sérialier le DOM construit pour écrire le fichier.
Exemple, en JDOM :
fichier à lire : variables.xml :
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="UTF-8"?>
<variables xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<variable>
<value>France</value>
</variable>
<variable>
<value>Grèce</value>
</variable>
<variable>
<value><xsl:variable name="Genre" select="client/nom"/></value>
</variable>
</variables> |
Fichier template.xsl qui définit grosso-modo la feuille de style et qui sert de base pour créer la feuille de style finale, dans laquelle on a inséré les variables :
1 2 3 4 5
| <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times">
<xsl:template match="/">
<root/>
</xsl:template>
</xsl:stylesheet> |
Et voici le code qui crée le fichier transform.xsl à partir de variables.xml et template.xsl :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class MakeXml {
public static void main(String[] args) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document varDoc = builder.build(new File("variables.xml"));
Document xsltDoc = builder.build(new File("template.xsl"));
// Choper toutes les valeurs du doc source
@SuppressWarnings("unchecked")
List<Element> variables = XPath.selectNodes(varDoc, "/variables/variable/value");
// Choper l'élément à remplir dans la XSLT
Element templateRoot = (Element)XPath.selectSingleNode(xsltDoc, "//root");
int i = 1;
for(Element variable : variables) {
variable.detach(); // retirer du doc source
variable.setName("VALUE" + i);
templateRoot.addContent(variable); // ajouter au doc construit
i++;
}
new XMLOutputter().output(xsltDoc, new FileOutputStream("transform.xsl"));
}
} |
Ça reste assez simple. Il faut utiliser les bibliothèques JDOM et Jaxen, pour ça.
Partager