XML :: LibXML行结束(空白)问题

时间:2010-05-10 05:29:13

标签: xml perl libxml2 xml-libxml

HI, 我在Perl中使用LibXML解析XML文件。 我遇到的问题是结束字符(空白)被视为文本节点。例如,给出如下输入

<?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-&gt; new(no_blanks =&gt; 1)),但它似乎没有效果。

提前致谢

2 个答案:

答案 0 :(得分:2)

XML :: LibXML :: Parser有$parser->keep_blanks(0);。它应该与no_blanks相反 - 看看是否有效

答案 1 :(得分:1)

严格来说,XML::LibXML正在做正确的事情...... <books>元素的三个子节点。问题是,你如何解析内容,为什么这是一个问题?

假设您已解析内容并将结果分配给$document,那么您现在拥有XML::LibXML::Document类的实例。使用此功能,您可以使用<books>

获取documentElement()元素
$books = $document->documentElement();

这将返回XML::LibXML::Element的实例。从这里,您可以使用<book>

获取getChildrenByTagName()子元素
@book_elements = $books->getChildrenByTagName('book');

这有帮助吗?