Элементы XML соответствуют пространству имен и привязаны к http://api.chartlyrics.com/
.
Если вы посмотрите XML, вы заметите, что элемент документа имеет декальдированное пространство имен:
<GetLyricResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://api.chartlyrics.com/">
Чтобы сопоставить элемент, связанный с пространством имен, вам нужно либо объявитьпрефикс пространства имен, связанный с этим URI, и используйте этот префикс пространства имен в выражении XPATH, либо используйте выражение XPATH, которое либо игнорирует пространства имен, либо совпадает по-разному.
Вы можете сопоставить элементы, а затем использовать local-name()
для сопоставленияимя элемента, независимо от объявленного пространства имен.
//*[local-name()='LyricArtist']
Если вы хотите быть более точным, вы можете использовать local-name()
для соответствия имени элемента и namespace-uri()
для соответствия объявленному пространству имен.
//*[local-name()='LyricArtist' and namespace-uri()='http://api.chartlyrics.com/']
Во втором примере было бы запрещено сопоставление элементов с одинаковыми local-name()
, которые были связаны с различными пространствами имен.Не может быть проблемой для этого конкретного экземпляра, но это то, что вы должны знать.Пространства имен используются для уникальной квалификации узлов и позволяют различным словарям использовать одно и то же «имя» для чего-либо, не беспокоясь о конфликте.