Я пытаюсь понять разницу между
//*[.] and //*[*]
Они возвращают разное количество элементов.
Также, где я могу использовать точка вместо атрибута
//tag[@Attribute = "value"]
Не только в случае текста? И как выглядит синтаксис? Потому что я пытался
//tag[@. = "value"] and //tag[. = "value"]
и последний работал только в случае текста, но не вместо регистра
//tag[@id = "value"]
например, так когда я могу изменить точку вместо атрибута?





//*[.] выберет все элементы. Он эквивалентен //*.
//*[*] выберет все элементы, у которых есть хотя бы один дочерний элемент.
//tag[@. = "value"] синтаксически недействителен.
//tag[. = "value"] выберет все элементы tag, строковое значение которых равен value. Например, для этого XML
<tag id = "r">
<tag id = "a">value</tag>
<tag id = "b">val<br/>ue</tag>
<tag id = "c"><span>val</span><span>ue</span></tag>
<tag id = "f"> value</tag>
<tag id = "g">Value</tag>
</tag>
//tag[. = "value"] выберет
<tag id = "a">value</tag>
<tag id = "b">val<br/>ue</tag>
<tag id = "c"><span>val</span><span>ue</span></tag>
См. также Тестирование узлов text() и строковых значений в XPath