简体   繁体   English

java中的字符串到xml元素

[英]String to xml elements in java

I'm working on a project in java but I need to create and xml from a list of Strings on this way:我正在用java开发一个项目,但我需要以这种方式从字符串列表中创建和xml:
1: "/data/user/firstname/John" 1:“/数据/用户/名字/约翰”
2: "/data/user/middlename/F" 2:“/数据/用户/中间名/F”
3: "/data/user/lastname/Thomas" 3:“/数据/用户/姓/托马斯”

and the expected result should be this one:预期的结果应该是这个:

<data>
  <user>
    <firstname>John</firstname>
    <middlename>F</middlename>
    <lastname>Thomas</lastname>
  </user>
<data>

does anyone know if it possible in java?有谁知道在java中是否可能? Thank you!谢谢!

Working example with plain Java, without frameworks:使用纯 Java 的工作示例,没有框架:

package test;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.util.Arrays;

public class Test {

    public static void main(String[] args) throws ParserConfigurationException, TransformerException {

        DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
        Document document = documentBuilder.newDocument();

        String a = "/data/user/firstname/John";
        String b = "/data/user/middlename/F";
        String c = "/data/user/lastname/Thomas";

        // Create arrays from string and trim first empty space before first '/'
        String [] arrayA = Arrays.copyOfRange(a.split("/"), 1, a.split("/").length);
        String [] arrayB = Arrays.copyOfRange(b.split("/"), 1, b.split("/").length);
        String [] arrayC = Arrays.copyOfRange(c.split("/"), 1, c.split("/").length);

        Element parent = null;
        for (int i = 0; i < arrayA.length; i++) {

            // Append text to child nodes, do it at very end
            if (i == arrayA.length - 1) {
                Element element1 = (Element) document.getElementsByTagName(arrayA[i - 1]).item(0);
                element1.appendChild(document.createTextNode(arrayA[i]));
                Element element2 = (Element) document.getElementsByTagName(arrayB[i - 1]).item(0);
                element2.appendChild(document.createTextNode(arrayB[i]));
                Element element3 = (Element) document.getElementsByTagName(arrayC[i - 1]).item(0);
                element3.appendChild(document.createTextNode(arrayC[i]));
                break;
            }

            // if names are same, appending only one of them
            if ((arrayA[i].equals(arrayB[i])) && (arrayA[i].equals(arrayC[i]))) {
                System.out.println("true");
                // create root node
                if (i == 0) {
                    Element element = document.createElement(arrayA[i]);
                    document.appendChild(element);
                    parent = element;
                    System.out.println(document.toString());
                } else {
                    Element element = document.createElement(arrayA[i]);
                    parent.appendChild(element);
                    parent = element;
                    System.out.println(document.toString());
                }
            // if node names at same levels are different, add all of them
            } else {
                System.out.println("false");
                Element element1 = document.createElement(arrayA[i]);
                Element element2 = document.createElement(arrayB[i]);
                Element element3 = document.createElement(arrayC[i]);
                parent.appendChild(element1);
                parent.appendChild(element2);
                parent.appendChild(element3);
            }
        }

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

Output of this program:该程序的输出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><data><user><firstname>John</firstname><middlename>F</middlename><lastname>Thomas</lastname></user></data>

Or, write it to file, then, to last lines need to be:或者,将其写入文件,然后,最后几行需要:

    StreamResult streamResult = new StreamResult(new File("result.xml"));
    transformer.transform(domSource, streamResult);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM