我试图将一般树(无限子节点)关联到一个名为“pays.xml”的XML文件,如下所示:
<?xml version="1.0" encoding="iso-8859-1"?>
<country>
<name> </name>
<city> </city>
<region>
<name> </name>
<population> </population>
<city> Lille </city>
</region>
<region>
</region>
</country>
Tree关联到此Xml文件:
现在我想将这棵树转换为二叉树,即为此算法:
使用常规树的根作为二叉树的根
确定根的第一个子节点。这是最左边的节点 下一级的一般树
插入此节点。父节点的子引用引用于此 节点
继续查找每个父节点的第一个子节点并将其插入下面 父节点,具有此节点的父节点的子引用。
结果是:
所以我的问题是生成与二叉树相关联的XML文件,我希望得到的结果是:
<country>
<name>
<city>
<region>
<name>
<population>
<city>
</city>
</population>
</name>
<region></region>
</region>
</city>
</name>
</country>
我试图为此编写代码,但不幸的是,我有这个结果
<?xml version="1.0" encoding="UTF-8" standalone="no"?><country><name/><city/><region><name/><population/><city/></region><region><name/><city/><city/></region></country>
这是我的代码:
public static Document Generer (Document doc, Node node,Node a )
{
NodeList nl = node.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n instanceof Element)
{
Element b = doc.createElement(n.getNodeName());
//System.out.print(b);
a.appendChild(b);
Generer (doc,n,b);
}
}
return doc;
}
public static void convert (Node node)
{
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
Element a=doc.createElement(node.getNodeName());
doc.appendChild(a);
doc=Generer (doc, node ,a);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
//StreamResult result = new StreamResult(new File("C:\\file.xml"));
// Output to console for testing
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static Node GetNodeParent (String fichier1)
{
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse(fichier1);
Element root = doc.getDocumentElement();
return root;
}catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Node n1= GetNodeParent("pays.xml");
//System.out.println(n1);
convert(n1);
}
答案 0 :(得分:1)
如果你仔细查看你的循环,那么你提供的代码完全不同的东西:
NodeList nl = node.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n instanceof Element)
{
Element b = doc.createElement(n.getNodeName());
//System.out.print(b);
a.appendChild(b);
Generer (doc,n,b);
}
}
您可能会注意到“node”变量的所有子项都将添加到“a”元素中。所以你所做的只是复制完整的树,扔掉所有非Element节点(例如,这样就失去了格式化)。