У меня есть XPath для выбора класса, который я хочу: //div[@class='myclass']
. Но он возвращает мне весь div (также с <div class='myclass'>
, но я хотел бы вернуть только содержимое этого тега без самого тега. Как я могу это сделать?
Как получить node значение /innerHTML с помощью XPath?
Ответ 1
С помощью xpath вещь, которую вы получите, является последней вещью в пути, которая не является условием. Что это значит? Ну, условия - это материал между []
(но вы уже это знали), а ваш читает как pathElement [, у которого есть атрибут 'class' со значением 'my class']. Элемент pathElement находится непосредственно перед [
.
Все вещи вне []
, тогда это путь, поэтому в //a/b/c[@blah='bleh']/d
a, b, c и d все элементы пути, blah - это атрибут и bleh буквальное значение. Если этот путь совпадает с ним, он вернет вам d, последнюю вещь, не относящуюся к условию.
Ваш конкретный путь возвращает (серию) div, являясь последней вещью в вашем пути xpath. Таким образом, это возвращаемое значение включает в себя верхний уровень node (ы), div в вашем случае и под ним (их) все его (их) дети. Узлами могут быть элементы или текст (или комментарии, инструкции по обработке,...).
Под node могут быть несколько текстовых узлов, поэтому обсуждается массив pOcHa. x/text()
возвращает весь текст, являющийся прямым дочерним элементом x, x/node()
возвращает все дочерние узлы, включая текст.
Надеюсь, что это поможет.
Ответ 2
node() = innerXml
text() = innerText
оба являются массивами, поэтому text() [1] - это первый детский текст node...
Ответ 3
Новый ответ на старый, часто задаваемый вопрос:
Для этого XML
<div class="myclass">content</div>
вы можете использовать XPath для выбора только content
одним из двух способов:
-
Текст Node Выбор
Этот XPath,
//div[@class='myclass']/text()
выберет текст Node дочерних элементов целевого элемента
div
content
, как было запрошено. -
Строковое значение элемента
Этот XPath,
string(//div[@class='myclass'])
вернет string-value целевого элемента
div
,content
, снова в соответствии с запросом.Дополнительная информация: здесь отметить объяснение строковых значений элементов:
string-value элемента Node является конкатенацией string-value всего текста Node descendants элемента Node в порядке документа.
Ответ 4
Вы можете попробовать
//ДИВ [@ class= 'MyClass']/ребенок:: *
child:: * выбирает всех дочерних элементов контекста node Подробнее