Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Perl';要提取标记中的属性吗?_Perl_Libxml2 - Fatal编程技术网

如何使用Perl';要提取标记中的属性吗?

如何使用Perl';要提取标记中的属性吗?,perl,libxml2,Perl,Libxml2,我有一个XML文件 <PARENT > <TAG string1="asdf" string2="asdf" > </TAG > </PARENT> 我想在这里提取string2值。。我还想将它设置为一个新值 如何做到这一点?使用XPath表达式 use strict;

我有一个XML文件

<PARENT >
<TAG string1="asdf" string2="asdf" >
</TAG >
</PARENT>

我想在这里提取string2值。。我还想将它设置为一个新值

如何做到这一点?

使用XPath表达式

use strict;                                                                                                                      
use warnings;                                                                                                                    

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

my $doc = XML::LibXML->new->parse_string(q{                                                                                      
<PARENT>                                                                                                                         
    <TAG string1="asdf" string2="asdfd">                                                                                         
    </TAG>                                                                                                                       
</PARENT>                                                                                                                        
});                                                                                                                              

my $xpath = '/PARENT/TAG/@string2';                                                                                              
# getting value of attribute:                                                                                                    
print Dumper $doc->findvalue($xpath);                                                                                            
my ($attr) = $doc->findnodes($xpath);                                                                                            

# setting new value:                                                                                                             
$attr->setValue('dfdsa');                                                                                                        
print Dumper $doc->findvalue($xpath);                                                                                            

# do following if you need to get string representation of your XML structure
print Dumper $doc->toString(1);                             
使用严格;
使用警告;
使用XML::LibXML;
使用数据::转储程序;
我的$doc=XML::LibXML->new->parse_字符串(q{
});                                                                                                                              
我的$xpath='/PARENT/TAG/@string2';
#获取属性的值:
打印转储程序$doc->findvalue($xpath);
my($attr)=$doc->findnodes($xpath);
#设置新值:
$attr->setValue('dfdsa');
打印转储程序$doc->findvalue($xpath);
#如果需要获取XML结构的字符串表示,请执行以下操作
打印转储程序$doc->toString(1);

当然,还可以阅读文档:)

您也可以使用XML::Parser来获取值。有关更多信息,请参阅:


我想你最好先开始玩一玩:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml = XMLin(\*DATA);

print $xml->{TAG}->{string2}, "\n";

$xml->{TAG}->{string2} = "asdf";

print XMLout( $xml, RootName => 'PARENT');

__DATA__
<PARENT>
<TAG string1="asdf" string2="value of string 2">
</TAG>
</PARENT>
#/usr/bin/perl
严格使用;
使用警告;
使用XML::Simple;
我的$xml=XMLin(\*数据);
打印$xml->{TAG}->{string2},“\n”;
$xml->{TAG}->{string2}=“asdf”;
打印XMLout($xml,RootName=>PARENT');
__资料__

感谢您的回复。我在“”中找到了另一个答案,我发现这个答案非常有用。

当然,如果你想自己走DOM,你也可以这样做。LibXML使用w3cdomapi,与Javascript中使用的相同。因此,它应该很熟悉(尽管API确实很烂,至少它是标准的)。@Anandan写“temme”而不是“tell me”并不酷。事实上,这会让像我这样的人感到不快,他们不得不花额外的精力在精神上分析你说的话。回答问题所得到的答案的质量与您在编写清晰、定义良好的问题时所付出的努力成正比。@jrockway蹩脚的DOM API可以相对容易地通过几个薄型包装来修复,这将使它更加完美。与其他公认更方便的模块相比,XML::LibXML的最大优势仍然是其性能。速度和内存从表面上看都很简单,但xml::simple data Structures会消耗大文档的内存,而且很快就会变得非常神秘。@singingfish再次查看OP的帖子。他没有足够的知识来开始学习其他图书馆。他需要做一点事情来学习一些东西,这样他才能进入一个阶段,了解你在评论中的意思。
#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml = XMLin(\*DATA);

print $xml->{TAG}->{string2}, "\n";

$xml->{TAG}->{string2} = "asdf";

print XMLout( $xml, RootName => 'PARENT');

__DATA__
<PARENT>
<TAG string1="asdf" string2="value of string 2">
</TAG>
</PARENT>