Другой вариант:
//item[substring-after(local-name(./@*[last()]),"_")="baz" and ./@*[last()]="12"][local-name(./@*[1])=substring-before(local-name(./@*[last()]),"_")]
Кратчайшая форма:
//item[@foo or @bar][@bar_baz="12" or @foo_baz="12"]
РЕДАКТИРОВАТЬ: Массивный и ужасный XPath здесь, но он должен работать. Он поддерживает до 5 атрибутов на элемент и независимо от положения этих атрибутов внутри каждого тега элемента.
//item[contains(local-name(@*[1]),"_baz") and @*[1]=12][local-name(@*[1])=substring-before(local-name(@*[1]),"_")]|//item[contains(local-name(@*[1]),"_baz") and @*[1]=12][local-name(@*[3])=substring-before(local-name(@*[1]),"_")]|//item[contains(local-name(@*[1]),"_baz") and @*[1]=12][local-name(@*[4])=substring-before(local-name(@*[1]),"_")]|//item[contains(local-name(@*[1]),"_baz") and @*[1]=12][local-name(@*[5])=substring-before(local-name(@*[1]),"_")]|//item[contains(local-name(@*[2]),"_baz") and @*[2]=12][local-name(@*[1])=substring-before(local-name(@*[2]),"_")]|//item[contains(local-name(@*[2]),"_baz") and @*[2]=12][local-name(@*[3])=substring-before(local-name(@*[2]),"_")]|//item[contains(local-name(@*[2]),"_baz") and @*[2]=12][local-name(@*[4])=substring-before(local-name(@*[2]),"_")]|//item[contains(local-name(@*[2]),"_baz") and @*[2]=12][local-name(@*[5])=substring-before(local-name(@*[2]),"_")]|//item[contains(local-name(@*[3]),"_baz") and @*[3]=12][local-name(@*[1])=substring-before(local-name(@*[3]),"_")]|//item[contains(local-name(@*[3]),"_baz") and @*[3]=12][local-name(@*[3])=substring-before(local-name(@*[3]),"_")]|//item[contains(local-name(@*[3]),"_baz") and @*[3]=12][local-name(@*[4])=substring-before(local-name(@*[3]),"_")]|//item[contains(local-name(@*[3]),"_baz") and @*[3]=12][local-name(@*[5])=substring-before(local-name(@*[3]),"_")]|//item[contains(local-name(@*[4]),"_baz") and @*[4]=12][local-name(@*[1])=substring-before(local-name(@*[4]),"_")]|//item[contains(local-name(@*[4]),"_baz") and @*[4]=12][local-name(@*[3])=substring-before(local-name(@*[4]),"_")]|//item[contains(local-name(@*[4]),"_baz") and @*[4]=12][local-name(@*[4])=substring-before(local-name(@*[4]),"_")]|//item[contains(local-name(@*[4]),"_baz") and @*[4]=12][local-name(@*[5])=substring-before(local-name(@*[4]),"_")]|//item[contains(local-name(@*[5]),"_baz") and @*[5]=12][local-name(@*[1])=substring-before(local-name(@*[5]),"_")]|//item[contains(local-name(@*[5]),"_baz") and @*[5]=12][local-name(@*[3])=substring-before(local-name(@*[5]),"_")]|//item[contains(local-name(@*[5]),"_baz") and @*[5]=12][local-name(@*[4])=substring-before(local-name(@*[5]),"_")]|//item[contains(local-name(@*[5]),"_baz") and @*[5]=12][local-name(@*[5])=substring-before(local-name(@*[5]),"_")]
Рабочий образец (4 выбранных узла):
