【问题标题】:update node text with datetime in XML使用 XML 中的日期时间更新节点文本
【发布时间】:2014-04-09 09:52:38
【问题描述】:

我有 XML:

< measCollecFile>
    < fileHeader>
        < measCollec>2013-03-14T12:10:00+00:00</measCollec>
    </ fileHeader>
    < measData>
        < measInfo>
            < granPeriod>2013-03-14T12:15:00+00:00</granPeriod>
            < measType>VS.ave</measType>
            < measType>VS.aveCPU</measType>
            < measValue>VS1</measValue>
            < measValue>VS2</measValue>
        </ measInfo>
            < granPeriod>2013-03-14T12:15:00+00:00</granPeriod>
    </ measData>
</ measCollecFile>

我确实问过similar query earlier 并得到了米勒的答复。这略有不同。而这次我需要更新节点上的日期时间而不是属性。

提供的节点列表qw(measCollec granPeriod)。我们需要以相同的格式更新当前的日期时间。

【问题讨论】:

    标签: xml perl datetime libxml2


    【解决方案1】:

    终于可以回答我自己的问题了。功劳仍然归于米勒!!

     my @attribs = qw(measCollec granPeriod);
    
     my $attribs_list = join ' | ', map {$_} @attribs;
    
     NODE: for my $node ($dom->findnodes("//*[$attribs_list]")) {
    
        for my $key (@attribs) {
            my @titles = $dom->getElementsByTagName($key);
                foreach my $t (@titles) {
    
                my ($plaindate, $tz) = split '(?=\+)', $t->textContent;
                my $date = Time::Piece->strptime($plaindate, $date_format);
                print "old $key = '$date'\n";
                my $newdate = localtime->strftime($date_format);
    
                    my $newrNode=XML::LibXML::Element->new($key);
                    $newrNode->addChild($dom->createTextNode($newdate));
                    $node->replaceChild($newrNode,$t);
    
            }
        }
    last NODE; # ending the loop otherwise it will cascade again.
    
    }
    
    print $dom->toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 2018-12-31
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多