Проблема с окончанием строки XML::LibXML (пробел)

Привет, я анализирую XML-файл, используя LibXML в Perl. Проблема, которая у меня есть, заключается в том, что конечные символы (пробелы) обрабатываются как текстовый узел. Например, с учетом ввода, подобного следующему

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
    <!ELEMENT title  (#PCDATA)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT year   (#PCDATA)>
    <!ELEMENT price  (#PCDATA)>
    <!ELEMENT book   (title, author, year, price)>
    <!ELEMENT books  (book*)>
]>
<books>
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</books>

Парсер считает, что количество дочерних узлов узла "books" равно 3, они:

  • текстовый узел (содержащий символ между <books> а также <book>)
  • элемент узла <book>
  • текстовый узел (содержащий символ между </book> а также </books>)

Вопрос в том, как сказать LibXML игнорировать пробелы? Я пытался с no_blanks (то есть $parser = XML::LibXML->new(no_blanks => 1) при создании синтаксического анализатора), но кажется, что это не имеет никакого эффекта.

заранее спасибо

2 ответа

XML::LibXML::Parser имеет $parser->keep_blanks(0);, Это должно сделать противоположность no_blanks - посмотреть, если это работает

Строго говоря, XML::LibXML делает правильную вещь... есть три дочерних узла <books> элемент. Вопрос в том, как вы анализируете контент и почему это проблема?

Предполагая, что вы проанализировали свой контент и присвоили результат $document Теперь у вас есть экземпляр XML::LibXML::Document учебный класс. Используя это, вы можете получить <books> элемент с помощью documentElement():

$books = $document->documentElement();

Это возвращает экземпляр XML::LibXML::Element, Из этого вы можете получить только <book> использование дочерних элементов getChildrenByTagName():

@book_elements = $books->getChildrenByTagName('book');

Это помогает?

Другие вопросы по тегам