W3Schools имеет довольно хорошее учебное пособие по XPath , которое я рекомендую.
Как вы упомянули в своем вопросе, если вы хотите выделить все <title/>
элементы в любом месте документа, вы можете использовать
//title
(к которому можно добавить предикат, например [@lang="fr"]
)
- В XPath
//
означает «где угодно».
- Если ваше выражение XPath начинается с
//
, это означает «где-нибудь в документе».
- Если оно начинается с одного
/
, это означает "в корне документа."
- Наконец, если он не начинается с косой черты, это означает «под узлом контекста».
Если вы знаете, что структура вашего дерева не изменится, точный путь к элементу <title/>
будет
/root/website[@id="MainWeb"]/title[@lang="fr"]
Теперь предположим, что вы планируете реструктурировать дерево и, возможно, переместить узел <website/>
под другим узлом. Вы можете сказать, «давайте посмотрим на узел <website/>
в любом месте и найдем узел <title/>
, который должен быть его дочерним элементом» , который в XPath будет
//website[@id="MainWeb"]/title[@lang="fr"]
Наконец, знайте, что вы можете использовать контекстный узел в качестве корня поиска, используя одну точку "."
Например, используя SimpleXML, вы можете искать <title/>
в любом месте в <website/>
, используя
$navXmlObject->website->xpath('.//title')