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()

我正在创建一个简单的java函数来更新/重写xml文件的值。 我能够从系统资源中选择XML文件,在更新文件并重新写入之后,节点的值永远不会得到更改

以下是我的片段:

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
     }
}