gpt4 book ai didi

xml - 有没有办法用垂直对齐方式漂亮地打印 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:27 25 4
gpt4 key购买 nike

我有一个配置文件,其中包含一些 XML,例如:

<Presidents>
<President first="George" last="Washington" number="1" year="1789" />
<President first="John" last="Adams" number="2" year="1797" />
</Presidents>

我想要一个 pretty-print 垂直对齐我的属性,这样文件看起来像:

<Presidents>
<President first="George" last="Washington" number="1" year="1789" />
<President first="John" last="Adams" number="2" year="1797" />
</Presidents>

这种格式样式取决于具有相同属性的元素列表,因此它可能不能普遍应用于任何 xml 文档,但是,它是配置文件的通用样式。我已阅读 xmllintxmlstarlet 的手册页,但找不到对此类功能的任何引用。

最佳答案

我创建了以下脚本来对齐列。我先通过我的xml思想xmllint,然后通过下面的:

#!/usr/bin/env ruby
#
# vertically aligns columns

def print_buf(b)
max_lengths={}
max_lengths.default=0

b.each do |line|
for i in (0..line.size() - 1)
d = line[i]
s = d.size()
if s > max_lengths[i] then
max_lengths[i] = s
end
end
end

b.each do |line|
for i in (0..line.size() - 1)
print line[i], ' ' * (max_lengths[i] - line[i].size())
end
end

end

cols=0
buf=[]

ARGF.each do |line|
columns=line.split(/( |\r\n|\n|\r)(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/m)
if columns.size != cols then
print_buf(buf) if !buf.empty?
buf=[]
end
buf << columns
cols = columns.size
end

print_buf(buf)

关于xml - 有没有办法用垂直对齐方式漂亮地打印 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com