当前位置: 首页 > 知识库问答 >
问题:

串联元素节点由相同状态名称组成一个元素节点

辛渝
2023-03-14
<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>
</ContactD>
<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</name>
    <street>East street</street>
    <state>Kerala</state>
    <country>India</country>
    <pin>67322</pin>
  </addr>
</ContactD>
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.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class Jparser {

  private static final String FILENAME = "books.xml";

  public static void main(String[] args) {

      // 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[3];

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

              Node node = list.item(temp);

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

                  Element element = (Element) node;

               
                  String name = element.getElementsByTagName("name").item(0).getTextContent();
                  String street = element.getElementsByTagName("street").item(0).getTextContent();
                  hell[temp]= 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[temp]);
                  System.out.println("country : " + country);
                  System.out.printf("pin :"+ pin);
              }
          }
          for (int t = 0; t < list.getLength()-1; t++) {
              if(hell[t].equals(hell[t+1])) {
                  /////here i need to concatenate the two element nodes which has same state in one xml data what to do here!!
                   System.out.println("same");
              }
              }


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

  }

}

我被卡住了,当我试图联系两个元素节点,我认为是相同的一个...我完成了匹配那些状态节点...需要帮助连接!!

共有1个答案

芮雪风
2023-03-14

输入

<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>

预期产出:

<?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>

下面是用于这种连接的Javacode:(对于太多的冗余注释和不均匀的代码表示抱歉)

         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();
  }
 类似资料:
  • 本文向大家介绍使用javascript的HTML元素的节点名称?,包括了使用javascript的HTML元素的节点名称?的使用技巧和注意事项,需要的朋友参考一下 节点名称 Javascript提供了document.nodeName来获取元素的节点。名称将通过使用特定节点的ID来获取。 语法 示例1 在下面的示例中,为节点提供了一个标签,并使用该标签,方法document.nodeName()获

  • 我是xsl的初学者,所以这可能是一个很容易的问题。我有一个xsl文件,我想在其中找到一个在param-object中定义的特定值: 有人能告诉我为什么我找不到childs的名字吗?多谢! 编辑:代码没有显示名称空间(我猜它是由浏览器解释的)。它的bginning和结尾没有括号: xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/xsl/transfo

  • 问题内容: 我认为对于真正了解JAXB绑定文件的人来说这很容易… 基本问题 如何配置JAXB将多个元素解组到同一类中? 注意:我想避免向我的项目中添加另一个依赖项(例如MOXy)。 理想情况下,这可以通过注释或自定义绑定文件来完成。 背景 我有一个XML文档,其中包含许多相同元素的变体,每个变体具有完全相同的属性。在下面的示例中,我只关心“雇员”,但是XML指定了“董事,经理和职员”。出于我们的目

  • 我认为这对真正理解JAXB绑定文件的人来说很容易... 如何配置JAXB将多个元素解组到同一个类中? 注意:我想避免在我的项目中添加另一个依赖项(比如MOXy)。理想情况下,这可以通过注释或自定义绑定文件来实现。 我有一个XML文档,其中包含许多相同元素的变体——每个元素都有完全相同的属性。使用下面的示例,我只关心“员工”,但XML指定了“董事、经理和员工”。为了我们的目的,这些都是同一个父类的子