Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.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 将具有相同状态名称的元素节点连接到一个元素节点中_Java_Html_Jquery_Xml - Fatal编程技术网

Java 将具有相同状态名称的元素节点连接到一个元素节点中

Java 将具有相同状态名称的元素节点连接到一个元素节点中,java,html,jquery,xml,Java,Html,Jquery,Xml,输入XML文件 杰克 南街 泰米尔纳德邦 印度 621716 本杰明 北街 泰米尔纳德邦 印度 621706 赖安 东街 喀拉拉邦 印度 67322 输出应如下所示: 杰克,本杰明 南街、北街 泰米尔纳德邦 印度 621716,621706 赖安 东街 喀拉拉邦 印度 67322 我尝试使用Java代码,我尝试匹配state元素,之后我不知道如何将这两个元素连接成一个 import org.w3c.dom.Document; 导入org.w3c.dom.Element; 导入org.w3

输入XML文件


杰克
南街
泰米尔纳德邦
印度
621716
本杰明
北街
泰米尔纳德邦
印度
621706
赖安
东街
喀拉拉邦
印度
67322
输出应如下所示:


杰克,本杰明
南街、北街
泰米尔纳德邦
印度
621716,621706
赖安
东街
喀拉拉邦
印度
67322
我尝试使用Java代码,我尝试匹配state元素,之后我不知道如何将这两个元素连接成一个

import org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
//导入com.sun.org.apache.xml.internal.security.utils.XPathFactory;
导入javax.xml.xmlstants;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入java.io.File;
导入java.io.IOException;
导入java.io.InputStream;
公共类Jparser{
私有静态最终字符串FILENAME=“books.xml”;
公共静态void main(字符串[]args){
//实例化工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
试一试{
//可选,但推荐
//安全地处理XML,避免XML外部实体(XXE)等攻击
setFeature(xmlstants.FEATURE\u SECURE\u PROCESSING,true);
//解析XML文件
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(新文件(文件名));
//可选,但推荐
// http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
System.out.println(“----”);
//得到
NodeList list=doc.getElementsByTagName(“addr”);
字符串[]hell=新字符串[3];
对于(int-temp=0;temp
当我试图联系两个元素节点时,我被卡住了,我将它们标识为相同的一个…我完成了匹配这些状态节点…需要连接的帮助

输入

<ContactD>
<addr>
<name>jack</name>
<street>south street</street>
<state>Tamilnadu</state>
<country>India</country>
<pin>621716</pin>
</addr>
<addr>
<name>Benjamin</name>
<street>north street</street>
<state>Tamilnadu</state>
<country>India</country>
<pin>621706</pin>
</addr>
<addr>
<name>Ryan</name>
<street>East street</street>
<state>Kerala</state>
<country>India</country>
<pin>67322</pin>
</addr>
<addr>
<name>yan</name>
<street>East street</street>
<state>Kerala</state>
<country>India</country>
<pin>67322</pin>
</addr>
</ContactD>

杰克
南街
泰米尔纳德邦
印度
621716
本杰明
北街
泰米尔纳德邦
印度
621706
赖安
东街
喀拉拉邦
印度
67322
雁鸣声
东街
喀拉拉邦
印度
67322
预期产出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ContactD>
<addr>
<name>jack,Benjamin</name>
<street>south street,north street</street>
<state>Tamilnadu</state>
<country>India</country>
<pin>621716,621706</pin>
</addr>

<addr>
<name>Ryan,yan</name>
<street>East street</street>
<state>Kerala</state>
<country>India</country>
<pin>67322</pin>
</addr>

</ContactD>

杰克,本杰明
南街、北街
泰米尔纳德邦
印度
621716,621706
Ryan,yan
东街
喀拉拉邦
印度
67322
这种连接的Javacode如下:(很抱歉有太多冗余注释和不均匀的代码)

导入java.io.File;
//日本航空公司
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.Result;
导入javax.xml.transform.Source;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
//导入com.sun.org.apache.xml.internal.security.utils.XPathFactory;
导入javax.xml.xmlstants;
导入javax.xml.parsers.parserConfiguration异常;
导入java.util.ArrayList;
导入java.io.IOException;
公共类Jparser{
私有静态最终字符串FILENAME=“books.xml”;
私有静态void toString(documentnewdoc)引发异常{
TransformerFactory transfactory=TransformerFactory.newInstance();
变压器变压器变压器=transfactory.newTransformer();
Source src=新DOMSource(新文档);
Result dest=newstreamresult(新文件(“books.xml”);
变换器(src,dest);
}
公共静态void main(字符串[]args)引发异常{
//实例化工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
         import java.io.File;
         //  j  a v  a  2  s .co  m
         import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
           import javax.xml.transform.Result;
         import javax.xml.transform.Source;
          import javax.xml.transform.Transformer;
         import javax.xml.transform.TransformerFactory;
          import javax.xml.transform.dom.DOMSource;
           import javax.xml.transform.stream.StreamResult;

           import org.w3c.dom.Document;
           import org.w3c.dom.Element;
            import org.w3c.dom.Node;
            import org.w3c.dom.NodeList;
            import org.xml.sax.SAXException;
  
           //import com.sun.org.apache.xml.internal.security.utils.XPathFactory;

           import javax.xml.XMLConstants;
            import javax.xml.parsers.ParserConfigurationException;
            import java.util.ArrayList;
            import java.io.IOException;

             public class Jparser {

               private static final String FILENAME = "books.xml";
            private static void toString(Document newDoc) throws Exception{
              TransformerFactory tranFactory = TransformerFactory.newInstance();
               Transformer aTransformer = tranFactory.newTransformer();
               Source src = new DOMSource(newDoc);
             Result dest = new StreamResult(new File("books.xml"));
              aTransformer.transform(src, dest);
             }


          public static void main(String[] args) throws Exception {


           // Instantiate the Factory
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

         try {

      // optional, but recommended
      // process XML securely, avoid attacks like XML External Entities (XXE)
      dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

      // parse XML file
      DocumentBuilder db = dbf.newDocumentBuilder();

      Document doc = db.parse(new File(FILENAME));

      // optional, but recommended
      // http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
      doc.getDocumentElement().normalize();

      System.out.println("Root Element :" + doc.getDocumentElement().getNodeName());
      System.out.println("------");

      // get <staff>
      NodeList list = doc.getElementsByTagName("addr");
      //String[] hell= new String[10];
      ArrayList<String> hell = new ArrayList<String>();
      ArrayList<Element> Ements = new ArrayList<Element>();

      for (int temp = 0; temp < list.getLength(); temp++) {

          Node node = list.item(temp);

          if (node.getNodeType() == Node.ELEMENT_NODE) {

              Element element = (Element) node;
              Ements.add(element);
              

           
              String name = element.getElementsByTagName("name").item(0).getTextContent();
              String street = element.getElementsByTagName("street").item(0).getTextContent();
              hell.add(element.getElementsByTagName("state").item(0).getTextContent());
              String country = element.getElementsByTagName("country").item(0).getTextContent();
              String pin = element.getElementsByTagName("pin").item(0).getTextContent();

         
   

              System.out.println("Current Element :" + node.getNodeName());
              System.out.println("name : " + name);
              System.out.println("street : " + street);
              System.out.println("state : " + hell.get(temp));
              System.out.println("country : " + country);
              System.out.printf("pin :"+ pin);
          }
      }
      
      System.out.println("The size of the ArrayList is: " + Ements.size());
     // System.out.println(Ements.get(0).name);
      for (int t = 0; t < Ements.size()-1; t++) {
         // for(int s=1;s<Ements.size()-1;s++) {

          //for(int d=1; d<list.getLength()-1;d++) {
          if(hell.get(t).equals(hell.get(t+1))) {
              /////here i need to concatenate the two element nodes which has same state in one xml data what to do here!!
             // int z=t;
              String[] he= {"name","street","state","country","pin"};
              for(int a=0; a<he.length; a++) {
                  //System.out.printf(Ements.get[a]);
                 String zz0=Ements.get(t).getElementsByTagName(he[a]).item(0).getTextContent();
                 String zz1=Ements.get(t+1).getElementsByTagName(he[a]).item(0).getTextContent();
                 if(!zz0.equals(zz1)){
                     Ements.get(t).getElementsByTagName(he[a]).item(0).setTextContent(zz0+","+zz1);
                 }
            //String zz=Ements.get(t).getElementsByTagName(he[a]).item(0).getTextContent()+","+Ements.get(t+1).getElementsByTagName(he[a]).item(0).getTextContent();
     
                 // Ements.get(t).getElementsByTagName(he[a]).item(0).setTextContent(zz);
                 // System.out.println(Ements.get(t).getElementsByTagName(he[a]).item(0).getTextContent());   
              }
              doc.getDocumentElement().removeChild(Ements.get(t+1));
              Ements.remove(t+1);
              hell.remove(t+1);
              System.out.println(Ements.size());
              
              
               
          }
      }
      
      System.out.println(Ements.size());
     // DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
     // DocumentBuilder domBuilder = domFactory.newDocumentBuilder();

      //Document newDoc = domBuilder.newDocument();
     //Element rootElement = newDoc.createElement("parent");
     // NodeList toremove=doc.getDocumentElement().getChildNodes();
      //for(int i=0;i<toremove.getLength();i++) {
        //  doc.getDocumentElement().removeChild(toremove.item(i));
          
      //}
     
      //doc.getDocumentElement().appendChild(Ements.get(0));
      //doc.getDocumentElement().appendChild(Ements.get(1));
      
      
      toString(doc);  
   
             
                  
            
               
         
          
      


  } catch (ParserConfigurationException | SAXException | IOException e) {
      e.printStackTrace();
  }