java - 使用 StAX 修改一个 XML 文件

标签 java xml stax

我有以下 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee ID="1">
        <Firstname>David</Firstname >
        <Lastname>Berkley</Lastname>
        <Age>30</Age>
        <Salary>25001</Salary>
    </Employee>
    <Employee ID="2">
        <Firstname>Ashton</Firstname>
        <Lastname>Hutt</Lastname>
        <Age>22</Age>
        <Salary>26000</Salary>
    </Employee>

</Employees>

我希望在此 XML 文件中添加更多字段,例如:

1) 新员工。

2) 新员工详细信息,例如此处未显示的地址。

3) 删除上一条记录

从用户那里获取适当的值后,我可以通过我的 java 代码相应地修改 XML。

假设在完成第 1 点和第 2 点之后,我的新 xml 变为...

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee ID="1">
            <Firstname>David</Firstname >
            <Lastname>Berkley</Lastname>
            <Age>30</Age>
            <Salary>25001</Salary>
            <Address>10th cross,Park Avenue</Address>
        </Employee>
        <Employee ID="2">
            <Firstname>Ashton</Firstname>
            <Lastname>Hutt</Lastname>
            <Age>22</Age>
            <Salary>26000</Salary>
        </Employee>
    <Employee ID="3">
        <Firstname>Holly</Firstname>
        <Lastname>Becker</Lastname>
        <Age>24</Age>
        <Salary>30000</Salary>
    </Employee>

</Employees>

如何使用 StAX 解析器实现此目的?请通过提供一些有关如何实现此目标的适当提示和代码来帮助我。 :(

编辑 1

这是我希望在添加任何新记录时调用的函数。

public void addNewEmployee(XMLStreamWriter writer,String newID, String firstN, String lastN, String age, String salary)
    {


         try 
         {


             writer.writeStartDocument();
             writer.writeStartElement("Employee");
             writer.writeAttribute("ID", newID);



             writer.writeStartElement("Firstname");
             writer.writeCharacters(firstN);
             writer.writeEndElement();

             writer.writeStartElement("Lastname");
             writer.writeCharacters(lastN);
             writer.writeEndElement();

             writer.writeStartElement("Age");
             writer.writeCharacters(age);
             writer.writeEndElement();

             writer.writeStartElement("Salary");
             writer.writeCharacters(salary);
             writer.writeEndElement();



             writer.writeEndElement();
             writer.writeEndDocument();


             writer.flush();
             writer.close();
            // System.out.println("New Record Added");

         } catch (XMLStreamException e) {
             e.printStackTrace();
         }


    }

编辑 2 我面临的另一个问题是在遍历之前的 XML 时......我如何遍历它以便我的光标紧跟在这个 block 之后

<Employee ID="2">
            <Firstname>Ashton</Firstname>
            <Lastname>Hutt</Lastname>
            <Age>22</Age>
            <Salary>26000</Salary>
        </Employee>

</Employees> 行之前

因为我需要调用 addNewEmployee()在适当的时候。

最佳答案

您不应该在每次使用相同的文件路径调用该方法时都创建一个新的编写器,因为这会覆盖您的文件。

只创建(和关闭)编写器一次并将其作为参数传递给方法:

public void addNewEmployee(XMLStreamWriter writer, String newID, String firstN, String lastN, String age, String salary)

关于java - 使用 StAX 修改一个 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772260/

相关文章:

java - 使用sql查询方法保存图像

xml - Firefox 和远程 XSL 样式表

php - 导入 WordPress 显示黑屏

java - 为什么 StAX 类没有在 Java 7 中针对 ARM 进行改造

Java XMLStreamWriter : Outputting Unicode extended characters (non-BMP)

java - 在 Java StAX 解析器中编码

java - OpenJPA:分离 EntityManager.close() 上的所有实体

java - hibernate 并从列表中删除

xml - 求助解决NSXMLParser error 39 : NSXMLParserAttributeNotStartedError

java - Spring启动事件后的Tomcat