2012-11-11 52 views
0

我想检查字符串是否存在于xml标签中在perl中查找子字符串

并且xml标签的格式如下。

<admin var="s_admin">xyz</admin> 

我试着用

index($xmlString,$str) != -1 

但它不是为我工作。这里是我的代码:

my $hostname = hostname; 
my $wlsadmin = grep s_wls_admin_host $ENV{CONTEXT_FILE}; 
$wlsadmin=~s/^\s+|\s+$//g; 
if(index($wlsadmin,$hostname) != -1) { 
    print("True"); 
} 
print($hostname); 
print($wlsadmin); 

,这里是打印语句的值:

rws3510357 <wls_admin_host oa_var="s_wls_admin_host">rws3510357</wls_admin_host> 
+0

那么,它适用于我。你能告诉我们更多的代码吗?一个[工作示例](http://sscce.org/)重现了所谓的行为? – amon

+0

如果你用'xml-parsing'标记这个问题,你有没有考虑过使用XML解析器? – Zaid

+0

我是perl和iam的初学者,不知道如何用xml解析它 – rahulshr

回答

1

正如其他人的评论,我不完全知道什么是适合你去错了,但这里有一个例子使用基于DOM的XML解析器来查找标签并提取其内容。从那里可以很容易地将这些内容与一些字符串进行比较,就像您使用index所做的那样。

#!/usr/bin/env perl 

use strict; 
use warnings; 

use Mojo::DOM; 
my $dom = Mojo::DOM->new(<<'END'); 
<wls_admin_host oa_var="s_wls_admin_host">rws3510357</wls_admin_host> 
END 

my $hostname = 'rws3510357'; 

my $wlsadmin = $dom->at('wls_admin_host')->text; 

if (index($wlsadmin, $hostname) != -1) { 
    print "True\n"; 
} 
+0

+1使用了一个很酷的解析器。顺便说一句:使用'at'而不是'find - > [0]'可能会更优雅一些。 :) – memowe

+0

也许你是对的,我想我误解了'at'的工作方式。内部看起来就是这样。会改变。 –

+0

感谢memowe和Joel为展示如何使用解析器实现相同 – rahulshr