Good morning!
I'm having a problem with retrieving attributes from a node in one
document and posting them to a node in another document. I can't see
anything wrong with the code, so any help would be appreciated. I've
included the output and the sample code. In the target document,
"levelB" in the 2nd instance of "levelA" has an attribute of "test".
When I gather the corresponding attributes from the source document and
merge them to the target document the "test" attribute that was only at
"levelB" in the 2nd instance of "levelA" now appears on "levelB" of the
1st instance of "levelA".
Thanks,
Frank
Here's the output.....
Source
<?xml version="1.0" encoding="UTF-8"?>
<root>
<levelA lvl="A1">
<levelB lvl="B1"/>
</levelA>
<levelA lvl="A2">
<levelB lvl="B2"/>
</levelA>
</root>
Target before
<?xml version="1.0" encoding="UTF-8"?>
<root>
<levelA>
<levelB>instance #1</levelB>
</levelA>
<levelA>
<levelB test="xyz">instance #2</levelB>
</levelA>
</root>
Target after
<?xml version="1.0" encoding="UTF-8"?>
<root>
<levelA lvl="A1">
<levelB lvl="B1" test="xyz">instance #1</levelB>
</levelA>
<levelA lvl="A1">
<levelB lvl="B1" test="xyz">instance #2</levelB>
</levelA>
</root>
And the code.....
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.Attribute;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.IOException;
import java.util.List;
public class Z_Test_A {
Document docS = DocumentHelper.createDocument();
Element rootS = DocumentHelper.createElement("root");
Document docT = DocumentHelper.createDocument();
Element rootT = DocumentHelper.createElement("root");
private void test() {
Element levelA = DocumentHelper.createElement("levelA");
levelA.addAttribute("lvl", "A1");
Element levelB = DocumentHelper.createElement("levelB");
levelB.addAttribute("lvl", "B1");
levelA.add(levelB);
rootS.add(levelA);
levelA = DocumentHelper.createElement("levelA");
levelA.addAttribute("lvl", "A2");
levelB = DocumentHelper.createElement("levelB");
levelB.addAttribute("lvl", "B2");
levelA.add(levelB);
rootS.add(levelA);
docS.add(rootS);
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setIndentSize(2);
System.out.println("Source");
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(docS);
System.out.println("\n\n");
}
catch (IOException e) {
}
levelA = DocumentHelper.createElement("levelA");
levelB = DocumentHelper.createElement("levelB");
levelB.setText("instance #1");
levelA.add(levelB);
rootT.add(levelA);
levelA = DocumentHelper.createElement("levelA");
levelB = DocumentHelper.createElement("levelB");
levelB.setText("instance #2");
levelB.addAttribute("test", "xyz");
levelA.add(levelB);
rootT.add(levelA);
docT.add(rootT);
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setIndentSize(2);
System.out.println("Target before");
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(docT);
System.out.println("\n\n");
}
catch (IOException e) {
}
treeWalk(docT.getRootElement());
try {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setIndentSize(2);
System.out.println("Target after");
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(docT);
System.out.println("\n\n");
}
catch (IOException e) {
}
}
private void treeWalk(Element element) {
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
List tgtDocNodeAttrs = ((Element)node).attributes();
List srcDocNodeAttrs =
((Element)docS.selectSingleNode(((Element)node).getPath())).attributes()
;
((Element)node).setAttributes(srcDocNodeAttrs);
for (int a = 0; i < tgtDocNodeAttrs.size(); i++) {
Attribute tmp = (Attribute)tgtDocNodeAttrs.get(a);
tmp.setParent(null);
((Element)node).add(tmp);
}
treeWalk((Element) node);
}
}
}
public static void main(String[] args) {
Z_Test_A z = new Z_Test_A();
z.test();
}
}
_______________________________________________
dom4j-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dom4j-user