Доброго времени суток
Длинная предыстория: Есть один массив производства EMC, и единственный известный мне способ вытащить из него статистику в свою систему мониторинга - использовать утилиту naviseccli. Не знаю насчёт разработчиков массива, но разработчики naviseccli точно были кончеными дебилами.
Есть два режима вывода информации - обычный и «xml», один другого хуже. В обычном в качестве разделителя поле-значение могут использовать ":", «=» или вообще ничего. Пример:
$ /opt/Navisphere/bin/naviseccli -h 1.1.1.1 getcache
[...]
Read Hit Ratio: N/A
Write Hit Ratio: N/A
Prct Dirty Cache Pages = 78
Prct Cache Pages Owned = 49
SPA Read Cache State Enabled
SPB Read Cache State Enabled
[...]
В виде «xml» эта проблема отходит на второй план, хотя жизнедеятельность надмозга-погромиста видна и здесь, включением разделителя в имя параметра
<PARAMVALUE NAME="Prct Cache Pages Owned = " TYPE="uint64"><VALUE>49</VALUE>
</PARAMVALUE>
<PARAMVALUE NAME="SPA Read Cache State " TYPE="string"><VALUE>Enabled</VALUE>
</PARAMVALUE>
Но появляется проблема в разделении разных объектов, например, разных дисков в запросе «getdisk». В «xml» выводе и имя диска, и все его параметры располагаются на одном уровне. И разные объекты отделены друг от друга .... ДВУМЯ ПЕРЕВОДАМИ МАТЬ ИХ СТРОКИ. В XML. Переводами строки. Отрывать яйца и ломать руки. Соответственно, ни одна стандартная библиотека разбора xml на такой изврат не рассчитана, и отделять один объект от другого придётся мне.
Так вот, вопрос. Могу ли я рассчитывать, что если в исходном xml в перечисляемых на одном уровне параметрах соблюдается определённый порядок, то и в выводе XML::LibXML::Element->getChildrenByTagName сохранится тот же порядок?