Not sure but to my mind all these transformations documentToXMLString → XmlStringToXMLNode → queryXMLNode may result in a “high” ressource usage if you call them a lot (no ?)
You can use XPath in setValue, if the path to your field is fix. Unfortunately xpath in setValue does not evaluate conditions, if your path is flexible I only the possibilities already posted by Rob and Ayell. I used pub.xml:queryXMLNode some times myself, but that was mainly for smaller structures.
PSUtilities has a service that may be what you’re looking for or it can at least get you going in the right direction so you can write your own generic Java service to do this:
ps.util.list:filterDocumentList