2012-11-11 88 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