我试图从这个XML代码上的id中提取属性messaggioUtente:
<?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;
        } 
    }发布于 2016-01-17 04:03:28
节点集的每个元素都是一个XML::XPath::Node::Attribute对象,它有一个getNodeValue方法来获取节点的值。
按顺序获取下一个ID的最佳方法是找到所有id属性的最大值并将其添加到其中
也可能最好使用XPath表达式//messaggioUtente/@id,以避免获取任何其他元素的id属性
这段代码演示了。我在示例数据中添加了两个元素,id值分别为2和3,以更好地显示功能
use strict;
use warnings 'all';
use feature 'say';
use XML::XPath;
use List::Util 'max';
my $xp = XML::XPath->new(ioref => \*DATA);
my $ids = $xp->find('//messaggioUtente/@id');
my $new_id = 1 + max map { $_->getNodeValue } $ids->get_nodelist;
say "New ID = $new_id";
__DATA__
<?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>
  <messaggioUtente id="2">
    <nome>Prova Evento</nome>
    <email>example@email.com</email>
    <sitoweb>www.example.com</sitoweb>
    <messaggio>Sample</messaggio>
  </messaggioUtente>
  <messaggioUtente id="3">
    <nome>Prova Evento</nome>
    <email>example@email.com</email>
    <sitoweb>www.example.com</sitoweb>
    <messaggio>Sample</messaggio>
  </messaggioUtente>
</messaggiUtenti>输出
New ID = 4https://stackoverflow.com/questions/34833623
复制相似问题