【问题标题】:Augeas to sort XML fileAugeas 对 XML 文件进行排序
【发布时间】:2018-11-27 12:47:56
【问题描述】:

我需要编辑一些 XML 文件,我可以删除和设置,但我不知道是否以及如何仅使用 Augeas 对 XML 文件进行排序?

有人做过吗,我现在正试图避免使用除 Augeas 之外的其他资源?

我正在使用 puppet、ruby、shell 脚本。我可以在 puppet 中使用 augeas,而不仅仅是 augtool。

这是我的确切任务: 根据元素名称、属性名称、表和列对元素进行排序

我有一个很大的 XML 文件,实际上包含很多表,这是一个表的示例:

<table name="validation_rule" numRows="6" remarks="" schema="public" type="TABLE">
  <column autoUpdated="false" digits="0" id="0" name="id" nullable="false" remarks="" size="10" type="int4">
    <child column="validation_rule_id" foreignKey="meta_field_name_validation_rule_id_fkey" implied="false" onDeleteCascade="false" table="meta_field_name"/>
    <child column="validation_rule_id" foreignKey="preference_type_validation_rule_id_fkey" implied="false" onDeleteCascade="false" table="preference_type"/>
    <child column="validation_rule_id" foreignKey="validation_rule_attributes_validation_rule_id_fkey" implied="false" onDeleteCascade="false" table="validation_rule_attributes"/>
  </column>
  <column autoUpdated="false" digits="0" id="1" name="rule_type" nullable="false" remarks="" size="25" type="varchar"/>
  <column autoUpdated="false" digits="0" id="2" name="enabled" nullable="true" remarks="" size="1" type="bool"/>
  <column autoUpdated="false" digits="0" id="3" name="optlock" nullable="false" remarks="" size="10" type="int4"/>
  <primaryKey column="id" sequenceNumberInPK="1"/>
  <index name="validation_rule_pkey" unique="true">
    <column ascending="true" name="id"/>
  </index>
</table>

这是我从同一个示例文件中删除的方式:

augtool> set /augeas/load/xml/lens "Xml.lns" 
augtool> set /augeas/load/xml/incl /home/ESSENT/i.camilovic/test/test.xml
augtool> load
augtool> rm /files/home/ESSENT/i.camilovic/test/test.xml/TopLevel/FooBar
augtool> save

这是我们用于其他用途的 puppet 代码示例:

    augeas { "${name} ReverseBuild Threshold fails":
      lens    => 'Xml.lns',
      incl    => $config_file,
      context => "${context}/triggers/jenkins.triggers.ReverseBuildTrigger/threshold",
      changes => [
        "set name/#text 'FAILURE'",
        "set ordinal/#text '2'",
        "set color/#text 'RED'",
        "set completeBuild/#text 'true'",
      ],
      notify  => Exec['reload-configuration'],
      require => Augeas["${name} Upstream Projects"],
    }

【问题讨论】:

    标签: xml sorting augeas


    【解决方案1】:

    这不能单独使用 Augeas(即augtool)来实现,但可以使用 Augeas 库和语言绑定来实现。您在什么情况下使用 Augeas?

    【讨论】:

    • 我们在 AWS 上有 AmazonLinux2 的环境,我们使用 puppet、ruby、shell 脚本……尽管我们已经安装了 python,但我们尽量避免使用它。我需要创建 Jenkins 作业来完成这项工作。此作业将使用通过 schemaspy 连接到数据库生成的现有文件,修改它们,并将它们推送到某个 git 存储库。
    • 如果为此使用 Puppet,您能否添加关于 Puppet 的问题并提供您正在考虑使用的 Puppet 语法示例?
    • 我添加了删除语法,我不知道如何排序,这就是我问的原因。如果不使用 augeas,那么我将不得不尝试使用 ruby​​
    • 这不是我的问题:您希望使用什么 Puppet 语法来实现排序?
    • 我已将其添加到帖子中。我发现了一些名为 chilkat 的红宝石,初步测试有效,我会看到...
    【解决方案2】:

    我建议不要使用 Augeas 在 Puppet 中完成该任务,而是使用 exec,例如:

    exec { "Sort test.xml":
      path        => $::path,
      command     => 'xmllint -c14n -o /path/to/test.xml /path/to/test.xml',
      refreshonly => true,
    }
    

    【讨论】:

    • 命令不做任何事情,文件保持相同的内容
    • 澄清一下,我没有使用 puppet,我已经从命令行运行 xmllint
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多