我如何对这个 XML 进行排序?
- 首先按字母顺序排列:
module
之前property
。 - 然后按字母顺序命名属性:
<module name="ClassTypeParameterName"/>
before<module name="PackageName"/>
。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="severity" value="error"/>
<property name="fileExtensions" value="java"/>
<module name="NewlineAtEndOfFile"/>
<module name="FileTabCharacter"/>
<module name="TreeWalker">
<module name="PackageName"/>
<module name="ClassTypeParameterName"/>
<module name="InterfaceTypeParameterName"/>
<module name="MethodTypeParameterName"/>
<module name="LambdaParameterName"/>
<module name="PatternVariableName"/>
<module name="RecordComponentName"/>
<module name="RecordTypeParameterName"/>
<module name="TypeName">
<property name="format" value="^[A-Z][_a-zA-Z0-9]*$"/>
</module>
<module name="AvoidDoubleBraceInitialization"/>
<module name="AvoidNoArgumentSuperConstructorCall"/>
<module name="OneTopLevelClass"/>
<module name="OuterTypeFilename"/>
</module>
</module>
我想xq
按这里的用法使用:Sorting an XML file in UNIX with a Bash script?
你可能想要这样的东西:
这使用
-S
(or--sort-keys
) 使用名称对键(XML 标记)进行排序,以便键位于module
键之前property
。然后它使用递归
walk()
函数应用于sort_by()
每个数组,根据name
属性值(写."@name"
)对每个数组的元素进行排序。此用法与手册中的示例
walk()
几乎相同。jq
这将产生以下输出:
请注意
xq
,即使对于空节点,也会显式写出结束标记。如果你想修复它(所以它<tag attr="..."></tag>
被更改为<tag attr="..."/>
),通过xmlstarlet fo
or传递结果xmlstarlet format
。作为参考,原始 XML 文档被转换成(没有任何排序)并且
jq
应用表达式的 JSON 文档等同于以下内容: