【发布时间】:2016-04-22 09:04:45
【问题描述】:
我正在尝试在此 XML 代码上从 messaggioUtente 中提取属性 id:
<?xml version="1.0" encoding="UTF-8" ?>
<?meta name="GENERATOR" content="XML::Smart/1.78 Perl/5.022001 [MSWin32]" ?>
<messaggiUtenti schemaLocation="messagiUtentiSchema.xsd">
<messaggioUtente id="1">
<nome>Prova Evento</nome>
<email>example@email.com</email>
<sitoweb>www.example.com</sitoweb>
<messaggio>Sample</messaggio>
</messaggioUtente>
</messaggiUtenti>
我的想法是以这种方式使用XML::XPath 和XML::XPath::XMLParser,但我得到的结果不正确:
my $xp = XML::XPath->new(filename => 'newfile.xml');
my $nodeset = $xp->find('//@id');
foreach my $node ($nodeset->get_nodelist) {
print XML::XPath::XMLParser::as_string($node);
}
问题是,我试图从 id 中获取整数值,而这段代码提取了整个字符串 id = "1"。
您对实现这一目标有何建议?我的目标是获取 ID 号并增加它,直到我为下一个 messaggioUtente 值获得一个新的未使用 ID。
所以我的代码是这样的,但是由于字符串问题它不正确。
$id = 1;
my $xp = XML::XPath->new(filename => 'newfile.xml');
my $nodeset = $xp->find('//@id');
foreach my $node ($nodeset->get_nodelist) {
my $tempvar = XML::XPath::XMLParser::as_string($node);
if($node eq $id)
{
$id = $id + 1;
}
}
【问题讨论】:
-
我想你想要
$node->getNodeText -
@ikegami:
No such method getNodeText in XML::XPath::Node::AttributeImpl -
XML::XPath::XMLParser::as_string($node)一般写成$node->toString