Java 怎么获取表示XML元素的字符串的方法

2019年8月11日20:49:14Java 怎么获取表示XML元素的字符串的方法已关闭评论 445 2193字阅读7分18秒

1.简介

Java 怎么获取表示XML元素的字符串的方法?——请看下文。

2.示例代码

/**
 * 版权所有 编程十万个怎么办(www.tah1986.com)
 */

import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import java.io.UnsupportedEncodingException;

public class Main{
    
    static public String NodeContext(Element el, String s) {
        Node n = (Node) el;
        boolean enableEsc = true;

        String ret = "";
        ret += "\r\n" + s + "<" + n.getNodeName();
        if (n.hasAttributes()) {
            NamedNodeMap al = n.getAttributes();
            Node an = null;
            for (int i = 0; i < al.getLength(); ++i) {
                an = al.item(i);
                ret += " " + an.getNodeName();
                ret += "=\"" + an.getNodeValue() + "\"";
            }
        }
        NodeList nl = n.getChildNodes();
        if (nl.getLength() > 0)
            ret += ">";
        else
            ret += "/>";

        for (int i = 0; i < nl.getLength(); ++i) {
            n = nl.item(i);
            if (n.getNodeType() == Node.ELEMENT_NODE) {
                
                ret += NodeContext((Element) n, s + "   ");
            } else {
                if (n.getNodeType() == Node.TEXT_NODE) {
                    if (enableEsc) {
                        ret += XmlUtil.xmlEsc(n.getNodeValue().trim());
                    } else {
                        ret += n.getNodeValue().trim();
                    }
                }
                if (n.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
                    if (n.getNodeName().substring(0, 9).equals("javax.xml")) {
                        if (n.getNodeName()
                                .equals("javax.xml.transform.disable-output-escaping"))
                            enableEsc = false;
                        if (n.getNodeName()
                                .equals("javax.xml.transform.enable-output-escaping"))
                            enableEsc = true;

                    } else {
                        ret += "<" + n.getNodeName() + " "
                                + n.getNodeValue() + ">";
                    }

                }

            }
        }
        if (nl.getLength() == 1
                && nl.item(0).getNodeType() == Node.TEXT_NODE)
            ret += "</" + el.getNodeName() + ">";
        else if (nl.getLength() > 0)
            ret += "\r\n" + s + "</" + el.getNodeName() + ">";
        return (ret);
    }
    
    static public String getNodeValue(Node parent) {
        String ret = "";

        Node n = parent.getFirstChild();
        while (n != null) {
            if (n.getNodeType() == Node.TEXT_NODE) {
                try {
                    ret = n.getNodeValue().trim();
                } catch (NullPointerException ex) {
                    ret = "";
                    break;
                }
            }
            n = n.getNextSibling();
        }
        return (ret);
    }
    
    public static String xmlEsc(String str) {

        
        
        
        
        int len = str.length();
        String esc = "'<>\"&";
        boolean needEscape = false;
        for (int i = 0; i < len; i++) {
            if (esc.indexOf(str.charAt(i)) != -1) {
                needEscape = true;
                break;
            }
        }
        if (!needEscape)
            return str;
        else 
        {
            StringBuffer ret = new StringBuffer();
            for (int i = 0; i < len; i++) {
                char c = str.charAt(i);
                switch (c) {
                case '&':
                    ret.append("&");
                    break;
                case '>':
                    ret.append(">");
                    break;
                case '<':
                    ret.append("<");
                    break;
                case '"':
                    ret.append(""");
                    break;
                case '\'':
                    ret.append("'");
                    break;
                default:
                    ret.append(c);
                    break;
                }
            }
            return ret.toString();
        }
    }
}

 
继续阅读
编程十万个怎么办