Идентификатор функции ('P38') выберет элемент со значением идентификатора P38.Но это не просто означает «атрибут с именем« id »».Это означает, что атрибут, объявленный в DTD или схеме, имеет тип ID.Вы не показали DTD или схему, и я подозреваю, что у вас ее нет.Если вы это сделали, и если он объявил атрибут id как идентификатор типа, то ваш документ был бы недействительным, поскольку значение идентификатора не может быть полностью числовым (по старым причинам SGML оно должно принимать форму имени).
На практике функцию id (), вероятно, лучше избегать, если у вас нет строгих требований к производительности.Он слишком хрупкий - он работает только тогда, когда вы проверяете исходный документ по схеме или DTD.В XSLT используйте вместо него key ().В качестве альтернативы, многие процессоры теперь распознают имя атрибута xml: id как самообъявляющееся значение идентификатора без ссылки на схему или DTD: используйте это, если ваш процессор поддерживает это.