正在从PERL LibXML Parser获取完整的XML字符串



我有以下处理所需的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。我怎样才能获得上面提到的数据?

XML::LibXML::Node对象有一个方法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_stringas_stringstringify或简单的string,并且不确定它在特定模块中是如何工作的,我总是搜索它们。它几乎总是这样。


更新

要只获取<content>元素的内部XML,必须获取它的子节点,并为每个子节点执行toStringmap需要在列表上下文中调用,否则会引发错误。请注意我是如何在print语句中将.更改为,的。

print "content is "
  , $respDom->getDocumentElement->findnodes("//content")->[0]->childNodes->map(sub {$_->toString});

最新更新