小编Aar*_*ier的帖子

Perl:将已编辑的字段保存到同一XML文件中

我刚刚开始使用Perl 1周前,我是一个编程newbee.请帮助,因为我的公司项目依赖于此.

情况:

我想打开一个XML文件,在这个例子中是Library.xml,并使用特定的"ISBN"编号编辑XML文档.找到ISBN号后,我想用匹配的"ISBN"号码更改特定书籍的页数.

问题:

现在,我可以做到以上但是,我需要保存更新的XML,使用相同的名称"library.xml",并保持原始XML文档的XML结构.这是我难倒的地方.我尝试过使用XML :: DUMPER和XML :: TWIG以及其他可能但都失败了.

原始XML文档:

library.XML看起来像这样:

<library>
  <book>
    <title>Perl Best Practices</title>
    <author>Damian Conway</author>
    <isbn>0596001738</isbn>
    <pages>542</pages>
    <image src="http://www.oreilly.com/catalog/covers/perlbp.s.gif"
           width="145" height="190" />
  </book>
  <book>
    <title>Perl Cookbook, Second Edition</title>
    <author>Tom Christiansen</author>
    <author>Nathan Torkington</author>
    <isbn>0596003137</isbn>
    <pages>964</pages>
    <image src="http://www.oreilly.com/catalog/covers/perlckbk2.s.gif"
           width="145" height="190" />
  </book>
  <book>
    <title>Guitar for Dummies</title>
    <author>Mark Phillips</author>
    <author>John Chappell</author>
    <isbn>076455106X</isbn>
    <pages>392</pages>
    <image src="http://media.wiley.com/product_data/coverImage/6X/07645510/076455106X.jpg"
         width="100" height="125" />
  </book>
</library> 
Run Code Online (Sandbox Code Playgroud)

代码:

以下是我试图操作但没有成功的代码.

#!/usr/bin/perl

use strict;
use warnings;
#use XML::Simple qw(:strict);

use XML::LibXML;
use XML::Dumper;

my $dump = new XML::Dumper; …
Run Code Online (Sandbox Code Playgroud)

xml perl

4
推荐指数
2
解决办法
3376
查看次数

使用Perl通过Xpath从XML中提取数据

情况: 我目前正在使用XML :: LibXML从XML中提取数据.我将它与XML元素的Xpath结合起来,我可以读取和替换XML中的大多数值.但是,我似乎无法访问XML的第一个标记中的特定数据.这是一个相当重要的领域,但我尝试了一些方法,仍然无法操纵该领域.

XML文件:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <test **date_time="201111031006"** xsi:noNamespaceSchemaLocation="test.xsd">
    <msg_ver>0001</msg_ver>
    <sender_id>john</sender_id>
    <recipient_id>mike</recipient_id>
 </test>
Run Code Online (Sandbox Code Playgroud)

我试图访问date_time字段(粗体)但我似乎无法这样做.我复制了XPath并试过,它不会工作.我实际上可以更改字段等,但我无法更改date_time字段.我甚至无法从字段中提取数据,更不用说更改它了.使用相同的功能,我可以读取,提取和保存对字段的更改,以及.

我的守则

 sub CHANGE_DATE()
  {
    my $parser = XML::LibXML->new();
    my $doc    = $parser->parse_file($newfile);
    my $query  = "/tradenet/@date_time"; ## this is the actual XPATH
    my($node)   = $doc->findnodes($query);
        $node->setData("$date");

    $doc->toFile($newfile);
Run Code Online (Sandbox Code Playgroud)

提前感谢您通过此观看的时间..

perl xpath

1
推荐指数
1
解决办法
818
查看次数

使用Perl进行XPath

我在Window 7机器上使用Perl进行编码.我可以使用下面的XPath代码从XML中提取数据

use strict;
use warning;

use XML::LibXML;

my $parser = XML::LibXML->new();
        my $doc    = $parser->parse_file($newfile);
        my $query  = "/tradenet/message/header/unique_ref_no/date/text( )";
        my($node)   = $doc->findnodes($query);
        $node->setData("$file_seq_number");  
Run Code Online (Sandbox Code Playgroud)

但是,当我在不同的XML上使用相同的代码时,第二个文档中的xpath如下所示:

/TradenetResponse/OutboundMessage/out:OutwardPermit/out:Declaration/out:Header/cac:UniqueReferenceNumber/cbc:SequenceNumeric
Run Code Online (Sandbox Code Playgroud)

与Perl代码一起,这就是提取代码的样子:

my $parser = XML::LibXML->new();
    my $doc    = $parser->parse_file($newfile);
    my $query  = "/TradenetResponse/OutboundMessage/out:OutwardPermit/out:Declaration/out:Header/cac:UniqueReferenceNumber/cbc:SequenceNumeric/text( )";
    my($node)   = $doc->findnodes($query);
    $node->setData("$file_seq_number");
Run Code Online (Sandbox Code Playgroud)

使用第二个代码,我无法从第二个XML检索数据.我在Perl.pl第5行的未定义值上收到此错误"无法调用方法"setData".

第二个XPATH地址中的":"字符是否会影响代码?

perl xpath

1
推荐指数
1
解决办法
1254
查看次数

标签 统计

perl ×3

xpath ×2

xml ×1