我的XML:
< measValue dn="Cabinet=0, Shelf=0, Card=2, Host=0">
< r p="1">1.42</r>
< r p="2">2.28</r>
< /measValue>
我希望将getAttribute(&#34; dn&#34;)与不同的模式匹配,例如
1&GT; Host=0
#这很容易
我的解决方案:
if (getAttribute("dn")=~ /Host=0/)
2 - ; Host=0 && Card=2
我可以但我需要匹配两次
if (getAttribute("dn")=~ /Host=0/) && (getAttribute("dn")=~ /Card=2/)
有没有更好的方法来帮助这个匹配第二种模式?使用LibXML
答案 0 :(得分:1)
尝试使用:
if (getAttribute("dn")=~ /^(?=.*\bHost=0\b)(?=.*\bCard=2\b)/)
单词边界\b
用于避免匹配myHost=01
和类似的所有内容。
答案 1 :(得分:0)
您的方法遇到的问题是getAttribute("dn") =~ /Card=2/
也会匹配Card=25
的值,这可能不是您想要的。
我首先编写一个帮助器,将带有键/值对的字符串转换为哈希:
sub key_value_pairs_to_hash {
my $string = shift;
my %hash;
for my $pair (split(/\s*,\s*/, $string)) {
my ($key, $value) = split(/\s*=\s*/, $pair, 2);
$hash{$key} = $value;
}
return \%hash;
}
然后你可以测试这样的值:
my $hash = key_value_pairs_to_hash('Cabinet=0, Shelf=0, Card=2, Host=0');
if ($hash->{Host} == 0 && $hash->{Card} == 2) {
print("match\n");
}