ToXmlOfJava

java 复制代码
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class StringToXMLConverter {
    public static void main(String[] args) {
        String input = "<chapter xml:id=\"chapter3-1\" role=\"汉语辞书条目库\">" +
                "<title xml:id=\"chapter3-1.title\">阿鼻地狱</title>" +
                "<info><title>阿鼻地狱</title>" +
                "<releaseinfo role=\"拼音\">ā bí dì yù</releaseinfo>" +
                "<releaseinfo role=\"来源图书\">新华成语词典</releaseinfo></info>" +
                "<para>阿鼻:梵语译音,意为"无间",即痛苦没有间断的意思。"阿鼻地狱"为佛教传说中八大地狱里最下层、最痛苦的地狱。</para>" +
                "<para><emphasis role=\"italic\">《敦煌变文集·目连缘起》:"七日之间,母身将死,堕阿鼻地狱,受无间之余殃。"元·无名氏《来生债》四折:"若不是点化真言,险堕了阿鼻地狱。"柯灵《从〈秋瑾传〉说到〈赛金花〉》:"八国联军铁蹄下的故都,烧杀淫掠,如阿鼻地狱,尽人皆知。"</emphasis></para>" +
                "<para>也比喻无法摆脱、难以忍受的痛苦境地。</para>" +
                "<para><emphasis role=\"italic\">冯雪峰《上饶集中营·炼狱杂记》:"但也有少数意志薄弱的......逐步上当,终至堕入阿鼻地狱。"</emphasis></para>" +
                "</chapter>";

        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.newDocument();

            // 创建根节点
            Element rootElement = doc.createElement("root");
            doc.appendChild(rootElement);

            // 将输入转化为DOM节点
            Document inputDoc = builder.parse(new InputSource(new StringReader(input)));
            Node inputRoot = inputDoc.getDocumentElement();

            // 遍历输入节点并复制到结果节点
            copyNode(doc, rootElement, inputRoot);

            // 格式化输出XML
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(System.out);
            transformer.transform(source, result);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void copyNode(Document doc, Node destParent, Node src) {
        if (src == null || destParent == null) {
            return;
        }

        Node newNode = null;

        switch (src.getNodeType()) {
            case Node.ELEMENT_NODE:
                Element srcElement = (Element) src;
                Element newElement = doc.createElement(srcElement.getTagName());
                destParent.appendChild(newElement);
                newNode = newElement;

                NamedNodeMap srcAttributes = srcElement.getAttributes();
                for (int i = 0; i < srcAttributes.getLength(); i++) {
                    Attr attr = (Attr) srcAttributes.item(i);
                    newElement.setAttribute(attr.getName(), attr.getValue());
                }
                break;

            case Node.TEXT_NODE:
                newNode = doc.createTextNode(src.getNodeValue());
                destParent.appendChild(newNode);
                break;

            case Node.COMMENT_NODE:
                newNode = doc.createComment(src.getNodeValue());
                destParent.appendChild(newNode);
                break;

            default:
                break;
        }

        NodeList srcChildren = src.getChildNodes();
        for (int i = 0; i < srcChildren.getLength(); i++) {
            copyNode(doc, newNode, srcChildren.item(i));
        }
    }
}
相关推荐
神奇夜光杯4 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
小c君tt5 小时前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
一名技术极客7 小时前
Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览
pdf·powerpoint·excel·文件在线预览
用余生去守护8 小时前
【反射率】-- Lab 转换(excel)
excel
进击的六角龙8 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
TracyDemo8 小时前
excel功能
excel
lc寒曦8 小时前
【VBA实战】用Excel制作排序算法动画
排序算法·excel·vba
zzzgd8168 小时前
easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头
java·excel·表格·easyexcel·导入导出
努力学习技能的LY8 小时前
Excel:vba实现批量插入图片批注
excel
图片转成excel表格9 小时前
wps怎么算出一行1和0两种数值中连续数值1的个数,出现0后不再计算?
excel·wps