当前位置: 首页 > 面试题库 >

如何在Java中更新xml文件

居飞扬
2023-03-14
问题内容

我有一个xml文件,调用data.xml就像下面的代码。该项目可以从客户端运行,没有问题,它可以读取xml文件。我现在遇到的问题是我想编写一个可以更新开始日期和结束日期的函数。我不知道如何开始。帮助将不胜感激。

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data>
       <username>admin</username>
       <password>12345</password>
       <interval>1</interval>
       <timeout>90</timeout>
       <startdate>01/01/2013</startdate>
       <enddate>06/01/2013</enddate>
       <ttime>1110</ttime>
    </data>

我的main.java

    public class main
    {
     public static void main(String[] args) 
      {
          Calendar cal2 =null;

    try {

              //read the xml      
              File data = new File("data.xml");  
              DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();         
              DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();           
              Document doc = dBuilder.parse(data);         
              doc.getDocumentElement().normalize();

     for (int i = 0; i < nodes.getLength(); i++) {     
              Node node = nodes.item(i);           
                if (node.getNodeType() == Node.ELEMENT_NODE) {     
                    Element element = (Element) node;   
                    username = getValue("username", element);
                    startdate = getValue("startdate", element);
                    enddate = getValue("enddate", element);
                  }
       }


  date = startdate; 
  Date date_int = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH).parse(date); 
  cal2 = Calendar.getInstance(); 
 cal2.setTime(date_int);


     //loop the child node to update the initial date
              for (int i = 0; i < nodes.getLength(); i++) {    
                  Node node = nodes.item(i);           
                    if (node.getNodeType() == Node.ELEMENT_NODE) {     
                        Element element = (Element) node;

                        setValue("startdate", element , date_int.toString());
                  }
              }

            //write the content in xml file
                TransformerFactory transformerFactory = TransformerFactory.newInstance();
                Transformer transformer = transformerFactory.newTransformer();
                DOMSource source = new DOMSource(doc);
                StreamResult result = new StreamResult(new File("data.xml"));
                transformer.transform(source, result);

        } catch (Exception ex) {    
          log.error(ex.getMessage());       
          ex.printStackTrace();       
        }
    }


      private static void setValue(String tag, Element element , String input) {  
            NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();   
            Node node = (Node) nodes.item(0); 
            node.setTextContent(input);

    }

问题答案:

首先加载XML文件…

DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
DocumentBuilder b = f.newDocumentBuilder();
Document doc = b.parse(new File("Data.xml"));

现在,有几种方法可以执行此操作,但简单来说,您可以使用xpath API查找所需的节点并更新其内容

XPath xPath = XPathFactory.newInstance().newXPath();
Node startDateNode = (Node) xPath.compile("/data/startdate").evaluate(doc, XPathConstants.NODE);
startDateNode.setTextContent("29/07/2015");

xPath = XPathFactory.newInstance().newXPath();
Node endDateNode = (Node) xPath.compile("/data/enddate").evaluate(doc, XPathConstants.NODE);
endDateNode.setTextContent("29/07/2015");

然后保存Document回文件…

Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
tf.setOutputProperty(OutputKeys.METHOD, "xml");
tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

DOMSource domSource = new DOMSource(doc);
StreamResult sr = new StreamResult(new File("Data.xml"));
tf.transform(domSource, sr);


 类似资料:
  • 问题内容: 我有一个XML文档,在它已经包含数据之后,我想对其进行更新。 我考虑过要在(附加)模式下打开XML文件。问题在于新数据将在根结束标记之后写入。 如何删除文件的最后一行,然后从该点开始写入数据,然后关闭根标签? 当然,我可以读取整个文件并进行一些字符串操作,但是我认为这不是最好的主意。 谢谢你的时间。 问题答案: 您绝对 不应该做 的快速简便的方法(请参阅下文)是使用来将整个文件读入字符

  • 问题内容: 我目前正在处理xml项目。到目前为止,我已经使用Dom Parser成功地将xml链接到java类。我在下面提供了代码。我正在努力的是将开始日期的月份更新一个月,因此类似2/1 / 2013、3 / 1/2013 …的内容将相应地在xml文件中更改。我在底部有方法调用,但是当我调用它时,xml文件不会更新它的值。帮助将不胜感激 之前的* data.xml * 想要data.xml 之后

  • 问题内容: 我想从另一个xml文件更新一个xml文件。我使用了一个xml文件,如下所示: 一个.xml文件 two.xml 如下: 从以上两个xml文件中,我想更改属性值一。XML,如果 从 two.xml中, 然后我想将 one.xml 文件更新为LinearLayout android:id =“ @ + id / linearLayout1”, 然后将属性值更改为 android:visib

  • 问题内容: 我在一个表中有一个XML列,如下所示: 我想像这样更新此字段: 我想通过SQL Server中的一个函数来做。 谢谢! 问题答案: 正如Mikael所述,您需要描述更新背后的逻辑。但是对于上面的预期输出,以下应该起作用:

  • 问题内容: 这是我的杰森样品 我想更新SName,ZipCode,taxAmount,Quantity和text [1]值,可以通过任何方式进行。我正在文件中使用JSON,而更新标签正在纳入HashMap中 问题答案: 将用新值替换当前值。同样,您可以更新其他值。完成后,您可以使用以下方法将其转换回: 并将其写回到文件中。

  • 问题内容: 我希望有一种方法可以在中显示XML文件的内容。通过实现自定义(和),我已经使用DOM完成了这一工作。但是,它非常笨拙(很多变通方法和黑客手段),并且边缘比较粗糙。 有谁知道一种方法来显示用SAX解析的XML文件的内容? 谢谢! 问题答案: 这是我使用的代码。它基于Dom4J的API,但是您可以轻松地将其转换为您喜欢的XML库的API: