Код AS3:
var id:String = "6";
var xml:XML = <a>
<b id="7"/>
<b id="6">
4
</b>
<b id="3">
тест
<id>3</id>
</b>
</a>;
function f(xl:XML):void
{
var id:String = "7";
trace(xml.b.(@id == id && (id is String)).toXMLString()); // <b id="7"/>
trace(xml.b.(@id == this.id && (this.id !== id)).toXMLString()); // <b id="6">4</b>
trace(xml.b.(@id == valueOf().id).toXMLString());
// <b id="3">
// тест
// <id>3</id>
// </b>
}
f(xml);
Единственная проблема тогда - что делать, если локальная переменная имеет то же значение, что и поле класса... Но вообще - да, в таких случаях, проще отпинать автора кода, чем придумывать извращенные решения...