Как использовать Nokogiri для анализа одного файла с несколькими XML-документами? - PullRequest
0 голосов
/ 30 марта 2012

У меня есть один файл, который содержит несколько сцепленных XML-файлов, например:

<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...
<?xml version ... ?>
<!DOCTYPE ... >
...

Есть ли способ проанализировать файл, как есть, используя Nokogiri, в отличие от нарезки файла?

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Вам нужно разделить его на отдельные документы, но это легко сделать.

Ruby's String.split метод делает это легко. Например, если переменная foo содержит текст, то foo.split("<?xml version ... ?>\n") вернет массив, который вы можете зациклить:

foo.split("<?xml version ... ?>\n")
[
    [0] "",
    [1] "<!DOCTYPE ... >\n...\n",
    [2] "<!DOCTYPE ... >\n...\n",
    [3] "<!DOCTYPE ... >\n..."
]

Разберите каждый из этих кусков, и вы уже в пути. Возможно, вам придется добавить оператор XML DECL, чтобы осчастливить Нокогири, но я думаю, что без него все будет хорошо.

0 голосов
/ 30 марта 2012

Это не будет действительный XML-файл, поэтому вы не можете разобрать все сразу.Но вы можете создать класс, унаследованный от File и обладающий умением возвращать конец файла, когда вы доберетесь до конца каждого XML-документа.При этом вы сможете открыть свой файл один раз, но при этом все равно будете делать несколько вызовов вашему XML-анализатору.

Если фрагменты XML не очень велики, может быть, лучше всего отбросить фрагмент по адресувремя в строковую переменную (возможно, с помощью регулярного выражения), и проанализируйте это.

...