разность xml в рубине? [закрытый]

Не доверие mount, /etc/mtab, /proc/mounts, и т.д.:

if [ `stat -c%d "$dir"` != `stat -c%d "$dir/.."` ]; then
    echo "$dir is mounted"
else
    echo "$dir is not mounted"
fi

, Когда $dir точка монтирования, она имеет другой номер устройства, чем его родительский каталог.

преимущество по альтернативам, перечисленным до сих пор, - то, что Вы ничего не должны анализировать, и это делает правильную вещь если dir=/some//path/../with///extra/components.

оборотная сторона - то, что это не отмечает / как точку монтирования. Ну, это достаточно легко к особому случаю, но все еще.

5
задан Lance Pollard 5 October 2009 в 02:25
поделиться

8 ответов

Несколько месяцев назад Ара Ховард опубликовал отрывок для сравнения XML-документов: Сравнение XML .

4
ответ дан 14 December 2019 в 04:42
поделиться

Изменения только в удаленном файле? Другими словами, является ли визуально привлекательный файл основным файлом, который изменяется только на основе распространения изменений в удаленном файле, или оба файла редактируются независимо? Если не оба редактируются, можете ли вы просто сравнить вырезанный файл с его последним экземпляром, а затем применить эти изменения?

1
ответ дан 14 December 2019 в 04:42
поделиться

I've wanted similar functionality myself in the past (mainly for unit testing xml generation) but I've never found a good solution. I'd assume at some point you're going to want to compare two DOMs and look for differences.

You could maybe take a look at how this 'xml subset matcher' tool does things for inspiration.

0
ответ дан 14 December 2019 в 04:42
поделиться

checking out the answers to this question may well help

0
ответ дан 14 December 2019 в 04:42
поделиться

Вам, вероятно, потребуется реализовать свою собственную логику сравнения. Ни одна из библиотек синтаксического анализа XML для Ruby не поддерживает различие документов. Пытаясь разработать логику, вы можете посмотреть на оператор == для LibXML :: XML :: Node, который позволяет сравнивать два объекта Node на основе их XML-представления.

LibXML API Docs

0
ответ дан 14 December 2019 в 04:42
поделиться

Боюсь, единственный способ сделать это передать код. Я написал свои собственные алгоритмы сравнения XML, и это будет намного проще, если вы будете постоянно использовать идентификаторы.

-1
ответ дан 14 December 2019 в 04:42
поделиться

Можно ли форматировать XML?

require "rexml/document"
formatter = REXML::Formatters::Pretty.new( 2 )
xml = REXML::Document.new '<cheese><name>Stilton</name><weight>250</weight><expire_date>2009-12-25</expire_date></cheese>'
formatter.write( xml, $stdout )

# Outputs:
#<cheese>
#  <name>
#    Stilton
#  </name>
#  <weight>
#    250
#  </weight>
#  <expire_date>
#    2009-12-25
#  </expire_date>
#</cheese>

Вы также можете использовать Chilkat Ruby XML-компонент, это бесплатное ПО.

require 'chilkat'
xml = Chilkat::CkXml.new()
xml.LoadXml("<cheese><name>Stilton</name><weight>250</weight><expire_date>2009-12-25</expire_date></cheese>")
print xml.getXml() + "\n";

# Outputs:
# 
# <?xml version="1.0" encoding="utf-8" ?>
# <cheese>
#     <name>Stilton</name>
#     <weight>250</weight>
#     <expire_date>2009-12-25</expire_date>
# </cheese>
0
ответ дан 14 December 2019 в 04:42
поделиться

Если вы создаете xml через Ruby, я бы предложил разобрать xml на объекты ruby, сравнить их, а затем повторно вывести различия.

Другой вариант, который я предлагаю, был бы быть красиво напечатанным с помощью tidy, затем введите текст diff два и проанализируйте результат.

0
ответ дан 14 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: