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)),但它似乎没有效果。
提前致谢
答案 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');
这有帮助吗?