我正在使用我需要处理的XML
<table>
<col1>check1</col1>
<col2>check2</col2>
<col3>check3</col3>
<content>
<data>gt1</data>
<data>check_gt1</data>
</content>
</table>
我想从解析器中获取“<content><data>gt1</data><data>check_gt1</data></content>
”。
我的解析代码如下,
my $parser = XML::LibXML->new();
my $respDom = $parser->parse_string($xmldata);
print "content is ".$respDom->getDocumentElement->findnodes("//content");
上面的代码导致节点内的textContent。如何获取上面提到的数据?
答案 0 :(得分:5)
XML :: LibXML :: Node对象有a method toString
。那就是你需要的。我通过快速搜索XML :: LibXML文档找到了它。
use strict;
use warnings;
use XML::LibXML;
my $xmldata = <<'XML';
<table>
<col1>check1</col1>
<col2>check2</col2>
<col3>check3</col3>
<content>
<data>gt1</data>
<data>check_gt1</data>
</content>
</table>
XML
my $parser = XML::LibXML->new();
my $respDom = $parser->parse_string($xmldata);
print "content is "
. $respDom->getDocumentElement->findnodes("//content")->[0]->toString;
这将打印:
content is <content>
<data>gt1</data>
<data>check_gt1</data>
</content>
一般来说,我总是会搜索to_string
,as_string
,stringify
或只是string
,如果我需要这样的东西,我不确定它是如何工作的具体模块。它几乎总是其中之一。
<强>更新强>
要仅获取<content>
元素的内部XML,您必须获取其子节点并为每个节点执行toString
。需要在列表上下文中调用map
整个事件,否则会引发错误。请注意我在.
语句中将,
更改为print
的方式。
print "content is "
, $respDom->getDocumentElement->findnodes("//content")->[0]->childNodes->map(sub {$_->toString});