Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XML结构创建问题_Java_Xml - Fatal编程技术网

Java XML结构创建问题

Java XML结构创建问题,java,xml,Java,Xml,I以下格式的数据(HashMap列表) 下面是所需的输出 <node id="1" label="India" > <node id="1.1" label="Sachin" Score="170" /> <node id="1.2" label="Sehwag" Score="120" /> </node> <node id="2" label="Sri-Lanka"> <node i

I以下格式的数据(HashMap列表)

下面是所需的输出

<node id="1" label="India" >
        <node id="1.1" label="Sachin" Score="170" />
        <node id="1.2" label="Sehwag" Score="120" />
</node>
<node id="2" label="Sri-Lanka">
      <node id="2.1" label="Sangakara" Score="20" />
      <node id="2.2" label="Murali" Score="20" />
      <node id="2.3" label="Jayasurya" Score="70" />
</node>
<node id="3" label="World-XI">
      <node id="2.2" label="Murali" Score="20" />
      <node id="1.1" label="Sachin" Score="170" />
</node>

现在,我已经能够生成上述结构,但有一个问题,“node id=3”中的id需要重复,而不是重新创建为3.1/3.2

另一个是,不一定是节点3是最后一个,我可以只为它迭代,但可能还有很多其他节点

下面是上面的当前代码,有什么建议吗

Map hm = new HashMap();
            Element em = null;
            try {
                int serverId = 0;
                int clientId = 0;

                DocumentBuilderFactory documentBuilderFactory = 
                DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document document = documentBuilder.newDocument();
                Element rootElement = document.createElement("CricketDetails");
                document.appendChild(rootElement);

                for (int i=0; i < l.size(); i++) {
                    hm = (HashMap) l.get(i);
                    sortListIP.add(hm.get("TeamName"));     
                }

                Collections.sort(sortListIP);

                HashSet h = new HashSet(sortListIP);
                sortListIP.clear();
                sortListIP.addAll(h);

                for (int i=0; i < sortListIP.size(); i++) {
                    ++serverId;
                    clientId = 0;
                    em = document.createElement("node");
                    em.setAttribute("id", ""+serverId);
                    em.setAttribute("TeamName", ""+sortListIP.get(i));
                    for (int j=0; j < l.size();j++) {
                        hm = (HashMap) l.get(j);

                        if (sortListIP.get(i).equals(hm.get("TeamName"))) {
                            Element em_child = document.createElement("node");
                            ++clientId;
                            em_child.setAttribute("id", serverId+"."+clientId);
                            em_child.setAttribute("label", (String) hm.get("Name"));
                            em.appendChild(em_child);
                            rootElement.appendChild(em);
                        }
                    }

                }
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(document);
                StreamResult result =  new StreamResult("cricketDetails.xml");
                transformer.transform(source, result);
Map hm=newhashmap();
元素em=null;
试一试{
int serverId=0;
int clientId=0;
DocumentBuilderFactory DocumentBuilderFactory=
DocumentBuilderFactory.newInstance();
DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
Document Document=documentBuilder.newDocument();
Element rootElement=document.createElement(“CricketDetails”);
document.appendChild(rootElement);
对于(int i=0;i

另外,定义的格式可能不正确,但只需要这样的预期输出!

如果要修改使用代码生成的节点的属性id,请修改包含em_child.setAttribute(“id”,serverId+“+clientId”)的行;
适当。父节点id的生成方式类似

我不确定您的xml是否不完整,但在xml中,您需要有根或文档实体

[XML]文档以“根”开头 或文件实体。”-


XML代码工作得非常好,我已经测试过了,当然我有一个根元素。我唯一的问题是迭代,我只需要这方面的帮助。您的代码缺少理解它所必需的细节,例如sortListIP的声明。此外,您应该使用泛型集合来实现类型安全。
Map hm = new HashMap();
            Element em = null;
            try {
                int serverId = 0;
                int clientId = 0;

                DocumentBuilderFactory documentBuilderFactory = 
                DocumentBuilderFactory.newInstance();
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document document = documentBuilder.newDocument();
                Element rootElement = document.createElement("CricketDetails");
                document.appendChild(rootElement);

                for (int i=0; i < l.size(); i++) {
                    hm = (HashMap) l.get(i);
                    sortListIP.add(hm.get("TeamName"));     
                }

                Collections.sort(sortListIP);

                HashSet h = new HashSet(sortListIP);
                sortListIP.clear();
                sortListIP.addAll(h);

                for (int i=0; i < sortListIP.size(); i++) {
                    ++serverId;
                    clientId = 0;
                    em = document.createElement("node");
                    em.setAttribute("id", ""+serverId);
                    em.setAttribute("TeamName", ""+sortListIP.get(i));
                    for (int j=0; j < l.size();j++) {
                        hm = (HashMap) l.get(j);

                        if (sortListIP.get(i).equals(hm.get("TeamName"))) {
                            Element em_child = document.createElement("node");
                            ++clientId;
                            em_child.setAttribute("id", serverId+"."+clientId);
                            em_child.setAttribute("label", (String) hm.get("Name"));
                            em.appendChild(em_child);
                            rootElement.appendChild(em);
                        }
                    }

                }
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(document);
                StreamResult result =  new StreamResult("cricketDetails.xml");
                transformer.transform(source, result);