java - 使用 StAX 保留 XML 布局(属性顺序、换行符)进行小的更改(例如更改属性)

标签 java xml-parsing stax

我正在尝试使用 StAX 迭代器 API 替换 SVG 文件中某些属性的值。我使用 XMLEventReader 读取原始文件,检查和修改元素,然后写入 XMLEventWriter

我的原始文件具有以下结构:

<?xml version="1.0" encoding="UTF-8"?>
<!--
...
-->
<!DOCTYPE ...
...
]>
<svg ...

我得到的输出不一样:

<?xml version="1.0"?><!--
...
--><!DOCTYPE ...
...
]><svg ...

如您所见,编码以及注释和文档类型周围的换行符都消失了。

此外,结果文件中所有标签上的所有属性的顺序似乎是随机的。我读过another question我知道不能保证属性顺序,但这对我没有帮助。

这些 SVG 文件位于 Git 下,因此我想尽可能保留它们的纯文本布局。

如何解决这些问题?在我当前的任务中,我可以将属性值替换为纯文本,而不进行任何解析,但我希望有一个解决方案,允许我考虑标签嵌套和类似的事情。

如果 StAX 无法完成,我完全愿意接受不同的方法。我已经尝试过 DOM 方法,但效果更糟。也许有一些 3d 方解析器...

最佳答案

VTD-XML(我是一个开源项目的作者)是一个 java API,它在解析后保留底层字节,同时导出 XML 树的层次结构......这意味着您可以替换原位字节,无需对文档的不相关部分进行任何不必要的修改..甚至直接覆盖字节...零开销

关于java - 使用 StAX 保留 XML 布局(属性顺序、换行符)进行小的更改(例如更改属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37868959/

相关文章:

java - XML 数字签名验证抛出 ResourceResolverException - Java 升级后

java - DOM、SAX 和 StAX XML 解析器之间有什么区别?

java - 如何使用 Java 正确迭代 xml?

java - XML 解析 - DOM 或 SAX - 以属性作为访问 java 层次结构的条件的复杂 xml

java - 如何更新 java 文档库?

java - 编译项目时出现错误 : Unable to locate Spring NamespaceHandler

c# - 如何使用适配器将自定义字体设置为 ListView 项中的 TextView 之一?

Node.js - 如何从 json 文件获取数据并使用该数据在 xml 中设置自定义属性

java - XMLStreamException : The namespace URI has not been bound to a prefix, IBM jre

java - JPA实体在服务器重启之前不更新