Adding line breaks between attributes
我有一个XML文档,通过XSLT发送后,它在XML属性之前不再有换行符。比如说
1 2 3 4 5 6 | <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e"/> </myoutertag> |
会变成
1 2 3 | <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e"/> </myoutertag> |
号
这当然是完全有效的XML,但更难读取,尤其是在有许多长属性值的情况下。据我所读,XSLT不能保留这些换行符,因为XSLT处理器不会传递这样不重要的信息。
所以,我现在要找的是一个基于命令行的漂亮打印机(在Linux中可用),它理想情况下只会更改文档,因为它在属性之间添加了换行符。不管它是否在第一个属性之前添加了一个,都与我无关,只要它更容易阅读。
到目前为止我所做的尝试没有成功:我正在使用输入文件
1 2 3 4 5 | <?xml version="1.0" encoding="UTF-8"?> <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e"/> </myoutertag> |
xmlint—格式
我同时尝试了
1 2 3 4 | <?xml version="1.0" encoding="UTF-8"?> <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e"/> </myoutertag> |
。
因此,变化是:
- XML衰退消失后的换行符
的压痕由4个空间减少到2个空间。
我不想要这些改变。这使用的是libxml版本20706。
XML-PP-S我试过
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <myoutertag one="a" two="b" three="c" ><myinnertag four="d" five="e" /></myoutertag> |
所以,没有压痕和奇怪的断线。
XMLStarlet
" test.xml
这是我最近的一次。运行命令
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e"/> </myoutertag> |
。
所以,如果我能让它在新行中的那些属性基本上解决我的问题之前多缩进一些(我想)。
还有什么建议吗?
好吧,我找到了解决办法。我使用的工具称为HTML TyDy(实际上,我使用JTIDY,一个HTML TyDy的端口到Java,因此是可移植的)。这个工具为配置提供了许多选项;我要找的那个叫做
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 |
这些选项的含义在Tidy手册(或者在Linux系统上安装的手册页)中进行了解释,我最关心的是可以在其中设置缩进设置的中间块。
现在我可以使用命令
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0" encoding="UTF-8"?> <myoutertag one="a" two="b" three="c"> <myinnertag four="d" five="e" /> </myoutertag> |
号
现在我很高兴。-)