XML实用程序类存在的简单修改-添加,删除/删除,更改/修改



是否存在具有下面客户机代码中显示的功能的Java库?我正在寻找一个库,提供使用字符串的基本XML操作能力。

MagicXml mXml = MagicXmlUtil.createXml("<team name='cougars'><players><player name='Michael'/></players></team>");
mXml.addNode("players", "<player name='Frank'/>");
mXml.addNode("players", "<player name='Delete Me'/>");
mXml.removeNode("player[@name='Delete Me']");
mXml.addAttribute("team[@name='cougars']", "city", "New York");
mXml.addAttribute("team[@name='cougars']", "deleteMeAttribute", "Delete Me");
mXml.removeAttribute("team[@name='cougars']", "deleteMeAttribute");
mXml.modifyAttribute("player[@name='Michael']", "name", "Mike");
mXml.setNodeValue("player[@name='Mike']", "node value for Mike");
MagicXmlNode node = mXml.getNode("<player[@name='Frank'/>");
mXml.addNode("players", node);
mXml.modifyAttribute("player[@name='Frank'][1]", "name", "Frank2");
System.out.println("mXml:n" + mXml.toString());
mXml:
<team name='cougars' city="New York">
    <players>
        <player name='Mike'>
            node value for Mike
        </player>
        <player name='Frank' />
        <player name='Frank2' />
    </players>
</team>

有许多不同的java库用于xml操作/编辑,如果您是初学者,使用java标准库的基本库很难使用,因此您应该尝试JDOM(java文档对象模型)进行解析和编辑很容易。如果您想尝试,请阅读一些文档并在这里下载示例代码http://www.jdom.org/祝您好运=)

您是否使用已经存在的东西,如dom4j或jdom或如我在我的评论中所说,您创建一个简单的类,包装调用查找节点使用XPath和添加/删除你想要的(节点,属性等)。

这是一个示例类,我将让您添加缺失的内容(modifyAttribute, setNodeValue等)

import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class MagicXml {
    static XPath xpath = XPathFactory.newInstance().newXPath();
    Document doc;
    Element root;
    public MagicXml(String xml) throws Exception {
        doc = parseXml(xml);
        root = doc.getDocumentElement();
    }
    private static Document parseXml(String xml) throws Exception {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
        return docBuilder.parse(bis);
    }
    private String asXPath(String path) {
        return path.startsWith("/") ? path : "//" + path;
    }
    private static Node findNode(Document doc, String xPath) throws Exception {
        XPathExpression expr = xpath.compile(xPath);
        return (Node) expr.evaluate(doc, XPathConstants.NODE);
    }
    public static MagicXml createXml(String xml) throws Exception {
        return new MagicXml(xml);
    }
    public MagicXml addNode(String path, String xml) throws Exception {
        Document subDoc = parseXml(xml);
        Node destNode = findNode(doc, asXPath(path));
        Node srcNode = subDoc.getFirstChild();
        destNode.appendChild(doc.adoptNode(srcNode.cloneNode(true)));
        return this;
    }
    public MagicXml removeNode(String path) throws Exception {
        Node destNode = findNode(doc, asXPath(path));
        destNode.getParentNode().removeChild(destNode);
        return this;
    }
    public MagicXml addAttribute(String path, String attr, String value) throws Exception {
        Element destNode = (Element)findNode(doc, asXPath(path));
        destNode.setAttribute(attr, value);
        return this;
    }
    public MagicXml removeAttribute(String path, String attr) throws Exception {
        Element destNode = (Element)findNode(doc, asXPath(path));
        destNode.removeAttribute(attr);
        return this;
    }
    public String docToString(Document doc) {
        try {
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            StringWriter sw = new StringWriter();
            transformer.transform(new DOMSource(doc), new StreamResult(sw));
            return sw.toString();
        } catch (Exception e) {
            return "";
        }
    }
    public String toString() {
        return docToString(doc);
    }
    public static void main(String[] args) throws Exception {
        System.out.println(//
                MagicXml.createXml("<team name='cougars'><players><player name='Michael'/></players></team>")//
                .addNode("players", "<player name='Frank'/>")//
                .addNode("players", "<player name='Delete Me'/>")//
                .removeNode("player[@name='Delete Me']") //
                .addAttribute("player[@name='Frank']", "foo", "bar") //
                .addAttribute("player[@name='Frank']", "bar", "bazz") //
                .removeAttribute("player[@name='Frank']", "bar") //
                .toString());
    }
}

XStream是一个非常简单的XML操作工具。它可以很容易地从java类转换到XML,反之亦然。

最新更新