[英]Java implementation that is similar to C#'s XmlDocument
是否有类似于C#的System.Xml.XmlDocument的java实现? 我目前正在尝试用Java复制这个C#代码片段。
XmlDocument doc = new XmlDocument();
doc.Load(new XmlTextReader(new StringReader(message)));
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("x", nameSpace);
XmlNodeList nodeList = doc.SelectNodes("//x:Object//@*", nsmgr);
这看起来与Java DOM Parser非常相似。 这是一个片段,向您展示如何编写xml:
// Use a Transformer for output
TransformerFactory tFactory =
TransformerFactory.newInstance();
Transformer transformer =
tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
这是一个如何读取xml的示例:
File fXmlFile = new File("/Users/mkyong/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
这个问题向您展示了如何做xpath: 如何在Java中使用XPath读取XML
既然如此,我认为这不是一个非常方便的库。 相反,我会调查XStream并尝试找出一种方法来使用它,如果可以的话。 这是一个更好的API。
import java.io.*; import java.util.*; import javax.xml.*;
import javax.xml.namespace.*; import javax.xml.parsers.*;
import javax.xml.xpath.*; import org.w3c.dom.*; import org.xml.sax.*;
public class XPathExample {
public static void main(String[] args) throws Exception {
String xml = "<example xmlns:x=\"http://example.com/example/\">"
+ "<x:Object attr=\"obj1attrvalue\">object 1</x:Object>"
+ "<x:Object attr=\"obj2attrvalue\">object 2</x:Object>"
+ "</example>";
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
docBuilderFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc =
docBuilder.parse(new InputSource(new StringReader(xml)));
Element docEl = doc.getDocumentElement();
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPathBuilder = xPathFactory.newXPath();
xPathBuilder.setNamespaceContext(new MyNamespaceContext());
XPathExpression xPath = xPathBuilder.compile("//x:Object//@*");
NodeList nodeList =
(NodeList) xPath.evaluate(docEl, XPathConstants.NODESET);
System.out.println("nodeList length=" + nodeList.getLength());
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println("nodeList[" + i + "]=" + node);
}
}
private static final class MyNamespaceContext implements NamespaceContext {
public String getNamespaceURI(String prefix) {
if ("x".equals(prefix)) {
return "http://example.com/example/";
}
return null;
}
public Iterator getPrefixes(String namespaceURI) {
return null;
}
public String getPrefix(String namespaceURI) {
return null;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.