Я новичок в использовании XPath и пытаюсь получить узел через его атрибут, но проблема в том, что атрибут не учитывает регистр, то есть я не буду точно знать, как строка помещается в документе.
Так, например:
Учитывая документ:
<Document xmlns:my="http://www.MyDomain.com/MySchemaInstance">
<Machines>
<Machine FQDN="machine1.mydomain.com">
<...>
</Machine>
<Machine FQDN="Machine2.MyDomain.Com">
<...>
</Machine>
</Machines>
</Document>
Если я хочу получить машину1, я бы использовал XPath:
//my:Machines/my:Machine/*[@FQDN='machine1.mydomain.com']
Но подобный XPath для получения machine2 потерпит неудачу, потому что регистр не совпадает:
//my:Machines/my:Machine/*[@FQDN='machine2.mydomain.com'] //Fails
Я видел различные упоминания в постах с использованием чего-то вроде (я не уверен, как применить к этому пространства имен):
translate(@FQDN, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
Но даже если я заставлю его работать, это будет очень громоздко, учитывая количество раз, когда я буду его использовать.
Наконец я прочитал, что XPath 2.0поддерживает match () и нижний регистр (), но, будучи новичком в XPath, я не понимаю, как их применять:
Например, если я попробую следующее, я получу «Неверное квалифицированное имя»: // my: Machines / my: Machine / [соответствует (@FQDN, '(? I) machine1.mydomain.com')] // my: Machines / my: Machine / [строчные (@FQDN,'machine1.mydomain.com')]
Может ли кто-нибудь предоставить пример XPath, включающий обработку пространства имен, которое будет работать?
Спасибо