我正在尝试使用 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/