Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Dom4J][rules & stylesheet] Ordre de déclaration de régles .

1 réponse
Avatar
Cram TeXeD
Hello.
Bonjour les gens.
J'ai un simple document extrait d'une BD (XSU oracle) du type :

<rowset>
<row num="1">
<foo>John Doo</foo>
...
<row/>
<rowset>

et j'utilise le package
org.dom4j.rule de cette façon.

-----------------------------------------
package xx.xx.xxx.dirty.sources;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.rule.Action;
import org.dom4j.rule.Rule;
import org.dom4j.rule.Stylesheet;
import org.dom4j.tree.DefaultDocument;
import org.dom4j.tree.DefaultElement;

public class DirtyXsuPersonne implements DirtyTransformSource {


Stylesheet selector = new Stylesheet();
Document toRet;
Element root;
String usecase="";

public DirtyXsuPersonne(String useCase){
this.usecase = useCase;
selector.addRule(new
Rule(DocumentHelper.createPattern("/rowset"), new headerBlock()));
selector.addRule(new
Rule(DocumentHelper.createPattern("/rowset/row"), new rowBlock()));
selector.addRule(new
Rule(DocumentHelper.createPattern("/rowset/row/*"), new dataBlock()));
}

public Document run(Document doc) throws Exception {
selector.run(doc);
return toRet;
}

private class headerBlock implements Action {
public void run(Node node) throws Exception {
root = new DefaultElement("transaction");
toRet = new DefaultDocument(root);
root.addAttribute("application","MyApp");
}
}

private class rowBlock implements Action {
public void run(Node node) throws Exception {
root.addElement("usecase",usecase);
}
}
private class dataBlock implements Action {
public void run(Node node) throws Exception {
Element data = new DefaultElement("data");
data.addAttribute("name",node.getName());
Element value = new DefaultElement("value");
value.addText(node.getText());
data.add(value);
root.add(data);
}
}
}


Pourtant ca ne marche pas.
Seule la première règle est prise en compte.
J'ai déjà utilisé ce package avec succés ailleurs.
Vous avez une idée ?

Merci

8:0) Cram TeXeD
--
"La réalité, c'est ce qui refuse de disparaître
quand on a cessé d'y croire." (Philip K.Dick)
<http://texed75.free.fr>

1 réponse

Avatar
Cram TeXeD
aux environs de Mon, 02 Feb 2004 11:45:07 +0100, Cram TeXeD frappa :

Pourtant ca ne marche pas.
Seule la première règle est prise en compte.
J'ai déjà utilisé ce package avec succés ailleurs.
Vous avez une idée ?


Solution:

Dans les classes qui immplémentes "Action" il faut appliquer la
méthode applyTemplate(node) à la feuille de style, selector en
l'occurence.

8:0) Cram TeXeD
--
"La réalité, c'est ce qui refuse de disparaître
quand on a cessé d'y croire." (Philip K.Dick)
<http://texed75.free.fr>