Java 将具有相同状态名称的元素节点连接到一个元素节点中
输入XML文件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
杰克
南街
泰米尔纳德邦
印度
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();
}