Вы пытаетесь вернуть 6
из вашего примера?
У меня нет xmlstarlet для тестирования, но попробуйте этот XPath:
//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']
Это должно вернуть значение элемента str
, который имеет атрибут name
со значением doc-norm
, когда его родительский элемент имеет дочерний элемент str
, который имеет атрибут id
со значением http://localhost:8080/index.html
. (Надеюсь, это имеет смысл!)
Я должен также добавить, что если вы знаете, каков уровень родительского элемента, постарайтесь избегать использования //
. Что-то вроде /doc[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']
будет более эффективным.
UPDATE
Я скачал xmlstartlet для тестирования, и он работает нормально, однако он возвращает весь элемент str
. Если вы хотите только текст, добавьте text()
в конец XPath:
//*[str[@name='id']='http://localhost:8080/index.html']/str[@name='doc-norm']/text()