是否存在具有以下客户端代码中显示的功能的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>
答案 0 :(得分:1)
有许多不同的java库用于xml操作/编辑,如果你的初学者很难使用java标准库的基础知识,那么你应该尝试使用JDOM(java文档对象模型)进行解析和编辑很容易。 如果您想尝试http://www.jdom.org/祝你好运=)
,请阅读一些文档并下载示例代码答案 1 :(得分:0)
你是否使用像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());
}
}
答案 2 :(得分:-1)
XStream是一个非常简单的XML操作工具。它可以很容易地从java类转换为XML,反之亦然。