你如何在 Java 中保存 DOM 文档?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5325178/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do you save DOM Document in Java?
提问by Chitresh
I am using DOM
parser and XPATH
to parse a my XML
file. I have changed a value of a node in the Document Object
. However when I open my XML
file, it doesn't show me any reflection. My DOM
parser code is as below :
我正在使用DOM
解析器并XPATH
解析我的XML
文件。我已经更改了Document Object
. 但是,当我打开XML
文件时,它没有显示任何反射。我的DOM
解析器代码如下:
private void setPortNumber(int portNumber) {
try {
Document parsedDocument = parseDocument(tempPath + "/apache-6/conf/server.xml");
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression expr;
expr = (XPathExpression) xPath.compile("//Connector");
Object result = expr.evaluate(parsedDocument, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Node node =nodes.item(i);
NamedNodeMap attributes = node.getAttributes();
for(int j=0; j< attributes.getLength(); j++){
String value = attributes.item(j).getNodeValue();
if(value.equals("HTTP/1.1")){
Node valueNode = attributes.item(0);
valueNode.setNodeValue(portNumber+"");
}
}
}
} catch (XPathExpressionException e) {}
}
private Document parseDocument(String xmPath) {
Document doc = null;
try {
DocumentBuilderFactory domFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = domFactory.newDocumentBuilder();
doc = builder.parse(xmPath);
}catch (Exception e) {}
return doc;
}
How can I save my document after done with changes?
完成更改后如何保存我的文档?
Can anyone help me to resolve this?
谁能帮我解决这个问题?
回答by Lalchand
Here is the sample code for updating an XML file
这是用于更新 XML 文件的示例代码
try
{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filePath);
Node rootNode = doc.getFirstChild();//for getting the root node
String expersion="books/author";//x-path experssion
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile(expersion);
Node updateNode=null;
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
updateNode=nodes.item(0);
updateNode.appendChild(doc.createCDATASection("new value"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult streamResult = new StreamResult(new File(filePath));
transformer.transform(source, streamResult);
}
catch (Exception e) {
e.printStackTrace();
}
回答by ZeissS
You could use the Transformer API to write your DOM to a stream or a file.
您可以使用 Transformer API 将 DOM 写入流或文件。
回答by adarshr
You have to transform the dom object into an XML using the transformer.
您必须使用转换器将 dom 对象转换为 XML。
http://download.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT4.html
http://download.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT4.html