C
Cram TeXeD
Hello.
I got a simple XML (retrieved with DB with Oracle XSU) like this
<rowset>
<row num="1">
<foo>John Doo</foo>
...
<row/>
<rowset>
And I'm using
org.dom4j.rule package this way.
-----------------------------------------
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);
}
}
}
-----------------------------------------
But it seems to only fire first rule "/rowset".
If I flip rules, it always fire the first.
As the dom4j mailing list is down, I post this here.
Do someone got an idea ?
Thanks ?
8:0) Cram TeXeD
I got a simple XML (retrieved with DB with Oracle XSU) like this
<rowset>
<row num="1">
<foo>John Doo</foo>
...
<row/>
<rowset>
And I'm using
org.dom4j.rule package this way.
-----------------------------------------
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);
}
}
}
-----------------------------------------
But it seems to only fire first rule "/rowset".
If I flip rules, it always fire the first.
As the dom4j mailing list is down, I post this here.
Do someone got an idea ?
Thanks ?
8:0) Cram TeXeD