<?xml version="1.0" encoding="windows-1252"?>
<node id="990475" title="XML::Twig - how can I test for an attribute when the attribute value is 0?" created="2012-08-29 10:07:24" updated="2012-08-29 10:07:24">
<type id="115">
perlquestion</type>
<author id="822434">
mertserger</author>
<data>
<field name="doctext">
&lt;p&gt;As I have posted before, I have to maintain a script written XML::Twig to validate dictionary entries. In one part of the entry we can have &amp;lt;la&amp;gt; elements which are used to hold label information such as whether the word is rare or not. The test for rare is that the la element contains the text "rare".&lt;/p&gt;
&lt;p&gt;I have now been asked to modify this so that the word is not treated as rare when the la element is marked with an attribute fq with a vlaue of 0 or 1. The fq attribute can also have a value of 2 in which case the word is still to be treated as rare.&lt;/p&gt;
&lt;p&gt;My code so far looks like this:
&lt;code&gt;sub is_la_rare { 
    my $elt = shift; # can be &lt;labels&gt; or &lt;def&gt;
    foreach my $label ($elt-&gt;children('la') ) {
        next unless $label-&gt;text eq "rare";
        my $isNowRare = 0;
        if (
            ($label-&gt;att('fq') eq "0")
            || ($label-&gt;att('fq') eq "1")
            )
                { $isNowRare = 1; }
        if ( !$isNowRare ) { return 1; }
    }
    return 0;
}
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The problem is that this generates "Use of uninitialized value in string eq" which I think is caused by the cases when the la element does not have an fq attribute on it. So I want to add a test for the attribute like this:
&lt;code&gt;($label -&gt;att('fq') &amp;&amp; $label-&gt;att('fq') == "1")&lt;/code&gt;. The first bit returns the value of the attribute so it works when that is 1 but if I try to use where the attribute is "0" &lt;code&gt;($label -&gt;att('fq') &amp;&amp; $label-&gt;att('fq') == "0")&lt;/code&gt; it doesn't work because it then returns 0 for the first bit.&lt;/p&gt;
&lt;p&gt;Is there a way of testing for the presence of an attribute in XML::Twig which would return "1" if the attribute is present regardless of the value of the attribute?&lt;/p&gt;</field>
</data>
</node>
