bla*_*dri 4 xml linux command-line newline pretty-print
我有一个XML文档,该文档通过XSLT发送后,在XML属性之前不再有换行符。所以举个例子
<myoutertag one="a"
two="b"
three="c">
<myinnertag four="d"
five="e"/>
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
会成为
<myoutertag one="a" two="b" three="c">
<myinnertag four="d" five="e"/>
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
这当然是完全有效的XML,但更难读取,特别是在有许多长属性值的情况下。根据我的阅读,XSLT无法保留这些换行符,因为XSLT处理器未传递此类不重要的信息。
因此,我现在正在寻找的是基于命令行的漂亮打印机(可在Linux中使用),理想情况下,它只会更改文档,因为它会在属性之间添加换行符。只要它更容易阅读,它是否在第一个属性之前添加一个就与我无关紧要。
我正在使用输入文件
<?xml version="1.0" encoding="UTF-8"?>
<myoutertag one="a" two="b" three="c">
<myinnertag four="d" five="e"/>
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
我尝试了两者xmllint --format test.xml,cat test.xml | xmllint --format -结果相同:
<?xml version="1.0" encoding="UTF-8"?>
<myoutertag one="a" two="b" three="c">
<myinnertag four="d" five="e"/>
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
因此,更改为:
<myinnertag>从四个空格减少到两个空格我都不想改变。这正在使用libxml版本20706。
我试过的风格none,nsgmls,nice,indented,record和record_c。唯一接近的nsgmls一个将添加换行符,但结果如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<myoutertag
one="a"
two="b"
three="c"
><myinnertag
four="d"
five="e"
/></myoutertag>
Run Code Online (Sandbox Code Playgroud)
因此,没有缩进和奇怪的换行。
的输出与的输出xmlstarter fo test.xml相同xmllint。我也尝试找到类似的东西,xmlstarter -ed -P --insert "//@*" -t text -n "" -v "\\n" test.xml但是导致glibc指针错误。我想这并不奇怪,因为我正在尝试在属性之间添加文本。
这是我到目前为止最接近的。运行命令tidy -quiet -xml -indent -wrap 1 test.xml给我:
<?xml version="1.0"
encoding="UTF-8"?>
<myoutertag one="a"
two="b"
three="c">
<myinnertag four="d"
five="e"/>
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
因此,如果我能在新属性的那些属性之前缩进一些符号,这基本上可以解决我的问题(我认为)。
还有其他建议吗?
好的,我找到了解决方案。我使用的工具称为HTML Tidy(实际上,我使用了jTidy,这是HTML Tidy到Java的端口,因此是可移植的)。该工具提供了许多配置选项。我正在寻找的被称为indent-attributes: true。实际上,我的整个配置文件是:
add-xml-decl: true
drop-empty-paras: false
fix-backslash: false
fix-bad-comments: false
fix-uri: false
input-xml: true
join-styles: false
literal-attributes: true
lower-literals: false
output-xml: true
preserve-entities: true
quote-ampersand: false
quote-marks: false
quote-nbsp: false
indent: auto
indent-attributes: true
indent-spaces: 4
tab-size: 4
vertical-space: true
wrap: 150
char-encoding: utf8
input-encoding: utf8
newline: CRLF
output-encoding: utf8
quiet: true
Run Code Online (Sandbox Code Playgroud)
这些选项的含义在Tidy手册(或如果在Linux系统上安装的手册页)中进行了说明,我主要关心的是可以设置缩进设置的中间块。
我现在可以使用命令调用该工具java -jar jtidy-r938.jar -config tidy.config test.xml,输出将是
<?xml
version="1.0"
encoding="UTF-8"?>
<myoutertag
one="a"
two="b"
three="c">
<myinnertag
four="d"
five="e" />
</myoutertag>
Run Code Online (Sandbox Code Playgroud)
现在我很高兴。:-)
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |