如何使用 SAX 解析器在 XML 中添加元素?

Posted

技术标签:

【中文标题】如何使用 SAX 解析器在 XML 中添加元素?【英文标题】:how can I add an element in an XML using SAX parser? 【发布时间】:2013-11-08 15:20:58 【问题描述】:

我正在使用 SAX 解析器来解析我的 XML 文件。我想添加一个这样的新元素。

enter code here
<data>
<accounts>
    <account id="1">
        <firstName>aaaa</firstName>
        <lastName>bbbb</lastName>
        <accountNumber>12342344</accountNumber>
    </account>
</accounts>

我想让我的上层 xml 变成这样:

enter code here
<data>
<accounts>
    <account id="2">
        <firstName>hgff</firstName>
        <lastName>lfghdf</lastName>
        <accountNumber>2344</accountNumber>
    </account>
                   <account id="1">
        <firstName>asdf</firstName>
        <lastName>gen</lastName>
        <accountNumber>144</accountNumber>
    </account>
</accounts>
</data>

【问题讨论】:

【参考方案1】:

SAX 解析器提供了一个事件驱动的框架来解析您的 xml 文件。我的意思是获取一个 xml 文件可以帮助您将信息提取到您的内部存储中。它不能帮助您生成 xml。 DOM 解析器框架通常确实具有 xml 生成功能。 SAX 解析器没有自己的内部存储空间。

【讨论】:

所以我必须转移到DOM,只是为了实现添加?或者我可以同时使用吗?是否可以在一个类中使用两个解析器? 为此,DOM 解析器会更简单,但没有什么能阻止您从内部存储生成自己的 xml。 在使用 DOM 生成它之后,我可以使用 SAX 解析它吗?在 XML 上查找字符串的 SAX 实现更快、更容易。 一旦数据在 DOM 中,只需将数据取出,DOM 解析就是获取一个平面文本文件并将其转换为计算机可以操作的数据结构。【参考方案2】:

使用 SAX 非常高效,但在编程工作方面非常耗费人力。我不清楚你是否知道这一点。

在 SAX 过滤器中实现这种转换当然很容易,但我不清楚为什么您会觉得它很困难。也许您需要阅读更多内容:Elliotte Rusty Harold 关于 Java 和 XML 的书,如果我没记错的话,其中有一个关于编写 SAX 应用程序的精彩章节。

【讨论】:

【参考方案3】:

SAX 解析器的问题实际上提供了一个按字母顺序排列的属性列表,而不是按原始元素插入的顺序使用:

StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(newElement), new StreamResult(writer));
InputStream is = new ByteArrayInputStream(writer.toString().getBytes());
saxParser.parse(is, handler);

【讨论】:

以上是关于如何使用 SAX 解析器在 XML 中添加元素?的主要内容,如果未能解决你的问题,请参考以下文章

java SAX解析器在工作代码更改后给出NullPointerException

使用 SAX 解析常见的 XML 元素

使用 SAX 解析 XML |如何处理特殊字符?

如何使用 SAX 解析器解析 XML

使用 Sax Parser、Java 处理 XML 中的空标签

SAX 解析器与 XMLPull 解析器