我有一个XML文件(xyz.xml),示例数据如下所示:
我想从文件(xyz.xml)中读取并更新同一xml文件中的值。
注意(我有一些变量,这些变量将包含用于更新xml文件的数据)
我的场景的简要说明[我将首先从另一个XML文件中读取值,并将它们存储在变量中。然后,我将使用变量来更新第二个xml文件(xyz.zml)
即使使用其他方法,如何在Java中完成此操作(写入XML文件(xyz.xml))?
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<string key="ankomstDato">2019-06-03T09:24:40.486</string>
<boolean key="samletUsrHoey">true</boolean>
<array key="driftsform">
<string>string_value</string>
</array>
<number key="versjon">0</number>
</map>
我的示例Java代码,但我得到了
线程“主”中的异常java.lang.NullPointerException,位于no.difi.oauth2.utils.SolutionXML2XmlFormat.Write2XMLfile(SolutionXML2XmlFormat.java:68)
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
//** */
public class SolutionXML2XmlFormat {
//Create Public Variables to store data
//**
public static String ankomstDato_value;
public static String art_value;
//+++
public void Xml2JavaObject(String TheXMLPath){
//read the xml(TheXMLPath) and store values in variables
//This is just an example
ankomstDato_value = "2022-08-03T09:24:40.486";
//Call method to write values
Write2XMLfile();
}
//Modify the existing values in Api_XML_Format.xml
//*
public void Write2XMLfile(){
try {
String filepath = "src/main/java/no/difi/oauth2/utils/Api_XML_Format.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
// Get the root element , this case its "map"
Node map = doc.getFirstChild();
//1. ankomstDato
Node ankomstDato = doc.getElementsByTagName("ankomstDato").item(0);
ankomstDato.setTextContent(ankomstDato_value);
//End ankomstDato
//2. art
//Node art = doc.getElementsByTagName("art").item(0);
//art.setTextContent(art_value);
//End art
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
System.out.println("Done Update The Api_XML_Format.xml");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
}
}
请记住包括您的问题实际上是什么。
但是,我希望您遇到了什么,NullPointerException
因为Node ankomstDato = doc.getElementsByTagName("ankomstDato").item(0);
找不到任何内容,因此返回null
。
它所指的“标签名称”实际上并不是您想要匹配的名称;在这种情况下,标签名称为“字符串”,“映射”,“布尔值”,“数组”或“数字”。您要查找的是其属性“键”的值为“ ankomstDato”的节点。
我建议改用XPath选择所需的元素。这是替换您的Write2XMLfile
方法的示例:
public void Write2XMLfile() {
XPathFactory xpathFact = XPathFactory.newInstance();
XPath xpath = xpathFact.newXPath();
try {
String filepath = "C:\\Users\\scsmi\\Desktop\\test.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
// 1. ankomstDato
Node ankomstDato = (Node) xpath.evaluate("(/map/string[@key='ankomstDato'])[1]", doc,
XPathConstants.NODE);
ankomstDato.setTextContent(ankomstDato_value );
// End ankomstDato
// 2. art
// Node art = doc.getElementsByTagName("art").item(0);
// art.setTextContent(art_value);
// End art
// 3. array
NodeList arrayElements = (NodeList) xpath.evaluate("/map/array[@key='driftsform']/*", doc,
XPathConstants.NODESET);
for (int i = 0; i < arrayElements.getLength(); i++) {
Node el = arrayElements.item(i);
System.out.println("array element: tag='" + el.getNodeName() + "' text='"
+ el.getTextContent() + "'");
}
// end array
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
System.out.println("Done Update The Api_XML_Format.xml");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
} catch (XPathExpressionException xee) {
xee.printStackTrace();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句