Проблема с окончанием строки 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');
Это помогает?