簡體   English   中英

java中的字符串到xml元素

[英]String to xml elements in java

我正在用java開發一個項目,但我需要以這種方式從字符串列表中創建和xml:
1:“/數據/用戶/名字/約翰”
2:“/數據/用戶/中間名/F”
3:“/數據/用戶/姓/托馬斯”

預期的結果應該是這個:

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

有誰知道在java中是否可能? 謝謝!

使用純 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);
    }
}

該程序的輸出:

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

或者,將其寫入文件,然后,最后幾行需要:

    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