Java 尝试使用标记名使用新的XML节点更新同一XML文件
我正在创建一个简单的java函数来更新/重写xml文件的值。 我能够从系统资源中选择XML文件,在更新文件并重新写入之后,节点的值永远不会得到更改 以下是我的片段:Java 尝试使用标记名使用新的XML节点更新同一XML文件,java,xml,Java,Xml,我正在创建一个简单的java函数来更新/重写xml文件的值。 我能够从系统资源中选择XML文件,在更新文件并重新写入之后,节点的值永远不会得到更改 以下是我的片段: String filePath = ABS_PATH + File.separator + "fields.xml"; File xmlFile = new File(filePath); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance()
String filePath = ABS_PATH + File.separator + "fields.xml";
File xmlFile = new File(filePath);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
//update Element value
updateElementValue(doc);
//write the updated document to file or console
doc.getDocumentElement().normalize();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(ABS_PATH
+ File.separator + "fields.xml")); // updating/re-writing the same file
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
System.out.println("XML file updated successfully");
} catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
e1.printStackTrace();
}
//method to show the update element value
private static void updateElementValue(Document doc) {
NodeList employees = doc.getElementsByTagName("NO");
Element emp = null;
//loop for each
for (int i = 0; i < employees.getLength(); i++) {
emp = (Element)employees.item(i);
Node name = emp.getElementsByTagName("String").item(0).getFirstChild();
name.setNodeValue(name.getNodeValue().toUpperCase());
}
}
String filePath=ABS\u PATH+File.separator+“fields.xml”;
文件xmlFile=新文件(文件路径);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
文档生成器dBuilder;
试一试{
dBuilder=dbFactory.newDocumentBuilder();
Document doc=dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
//更新元素值
更新元素值(doc);
//将更新的文档写入文件或控制台
doc.getDocumentElement().normalize();
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
DOMSource=新的DOMSource(doc);
StreamResult=新的StreamResult(新文件(ABS\u路径
+File.separator+“fields.xml”);//更新/重新写入同一文件
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
变换(源、结果);
System.out.println(“XML文件更新成功”);
}捕获(SAXException | ParserConfiguration异常| IOException | TransformerException e1){
e1.printStackTrace();
}
//方法来显示更新元素值
私有静态void updateElementValue(文档文档){
NodeList employees=doc.getElementsByTagName(“否”);
元素emp=null;
//每个循环
对于(int i=0;i
xml文件的示例
<Document xmlns="http://hello.com/schema/public/services/platform" Id="1">
<Fields>
<Field FieldName="NO">
<String>Demo</String>
</Field>
<Field FieldName="TYPE">
<String>Zada</String>
</Field>
</Fields>
演示
扎达
谁有足够的动力来帮助你,你有以下陈述:
NodeList employees = doc.getElementsByTagName("NO");
它将返回一个空列表,因为您的XML没有任何标记为“NO”的节点
<Field FieldName="NO">
以上内容未经测试
NodeList employees=doc.getElementsByTagName(“否”)
将返回一个空列表,因为您没有标记为“NO”的元素。请按照您的意愿将其设置为answerPosted。谢谢,但我如何获得此-FieldName=“NO”以获取此值-演示并更新它。谢谢我的回答。你熟悉吗?嗯。。你要么熟悉自己,要么使用像这样的库。我遵循了本教程,因为它的结构与我的相同,但没有头道
NodeList employees = doc.getElementsByTagName("Field");
for (int i = 0; i < employees.getLength(); i++) {
emp = (Element)employees.item(i);
if ("NO".equals(emp.item(i).getAttribute("FieldName"))) {
// do your stuff
}
}