如何格式化具有长属性列表的 XML 文件?

如何格式化具有长属性列表的 XML 文件?

我目前正在处理包含具有一长串属性的元素的 XML 文件。当我尝试xmllint --format myfile.xml仅使用缩进的元素重新缩进整个 XML 文件时,属性仍然保留在一行中。

是否有一些(命令行、Windows 或 GNU/Linux)程序支持重新格式化 XML (包括属性)?

例如如下的 XML:

<root>
  <node attribute1="some long attribute value" attribute2="some long attribute value" attribute3="..."/>
</root>

应输出类似以下内容:

<root>
  <node attribute1="some long attribute value"
        attribute2="some long attribute value"
        attribute3="..."/>
</root>

答案1

虽然您善意地寻找“命令行工具”完全没问题,但不幸的是,我认为任何真正可行的解决方案都需要您自己编写一些代码,或者至少利用现有代码(例如 XML 解析器/生成器)。在评论中,发布了一些您可以尝试的方法,这些方法可能会或可能不会让您获得您想要的确切格式样式。如果它真的很接近但不完全,您最好的选择可能是编辑“几乎”到达那里的程序的源代码。当然,如果您不懂任何编程语言,这可能会有点陷入僵局。

我称所有这些解决方案都是“可能的”,因为即使它们按照你想要的方式格式化属性,它们也可能会格式化某些东西别的在某种程度上想要,然后你又回到原点。由于你没有说明你的全部转换要求,我只能猜测其中哪些是你可以接受的,所以你只能一个接一个地尝试,直到你偶然发现一些可行的方法,或者利用现有代码并编写一个小程序自己创建它。

无需编程的可能解决方案

图形用户界面

命令行

  • XMLTidy(最后更新于 2005 年;可能已过时)
  • Dom4j(之所以包括在这里,是因为 SO 答案中已经完整地提供了“编程”部分)

编程可能的解决方案

  • 使用下列方法之一编写您自己的自定义程序:
  • 薛西斯
  • Dom4j
  • 萨克斯
  • Eclipse 用于解析 XML 的底层库,可能允许您以编程方式格式化 XML 并设置自定义格式规则,如 Eclipse 选项中所示

...它按照您希望的方式处理 XML。

也可以看看那么有疑问。

最后,请注意,如果你想要社区帮助,深入研究编写涉及这些技术之一的程序,你应该提出针对以下问题的具体问题:选择的 XML 解析器/生成器/库堆栈溢出不是在 SuperUser 上。我们主要在这里处理有关现有程序使用的问题。

相关内容