Augeas для сортировки файла XML - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно отредактировать некоторые XML-файлы, я в порядке с удалением и настройкой, но я не вижу, можно ли и как можно отсортировать XML-файл, используя только Augeas?

Кто-нибудь делал это?Я сейчас пытаюсь избежать других ресурсов, кроме Augeas?

Я использую сценарии puppet, ruby, shell.Я могу использовать augeas в puppet, а не только 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

Вот пример кода в марионетке, который мы используемдля чего-то другого:

    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"],
    }

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вместо того, чтобы использовать Augeas для выполнения этой задачи в Puppet, я бы рекомендовал использовать exec, например:

exec { "Sort test.xml":
  path        => $::path,
  command     => 'xmllint -c14n -o /path/to/test.xml /path/to/test.xml',
  refreshonly => true,
}
0 голосов
/ 27 ноября 2018

Этого нельзя достичь только с помощью Augeas (т. Е. augtool), но этого можно достичь, используя библиотеку Augeas вместе с привязками к языку.В каком контексте вы используете Augeas?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...