Вопрос по xml, parsing – Как получить значение узла / innerHTML с XPath?

32

У меня есть XPath, чтобы выбрать класс, который я хочу://div[@class='myclass']. Но это возвращает мне весь div (с<div class='myclass'> также, но я бы хотел вернуть только содержимое этого тега без самого тега. Как я могу это сделать

Ваш Ответ

4   ответа
33

которая не является условием. Что это значит? Ну, условия вещи между[] (но ты уже знал это), а твое читается какpathElement имеет атрибут «класс» со значением «мой класс»]. Элемент pathElement находится непосредственно перед[.

Все вещи вне[] то есть путь, поэтому в//a/b/c[@blah='bleh']/d a, b, c а такжеd все элементы пути, Бла является атрибутом, а BLEH буквальное значение. Если этот путь совпадает, он вернет вамd, последняя вещь без условий.

Ваш конкретный путь возвращает (серию) ДИВ, будучи последним на пути вашего xpath. Таким образом, это возвращаемое значение включает в себя узлы верхнего уровня, ДИВ в твоем случае, а под ним (ими) все его (их) дети. Узлы могут быть элементами или текстом (или комментариями, инструкциями по обработке, ...).

Под узлом может быть несколько текстовых узлов, отсюда и массив pOcHa.x/text() возвращает весь текст, который является прямым потомком x,x/node() возвращает все дочерние узлы,в том числ текст.

Надеюсь это поможет

41
node() = innerXml

text() = innerText

поэтому text () [1] является первым дочерним текстовым узлом ...

Как будут выглядеть несколько текстовых узлов в XML? Будет ли text () возвращать конкатенацию всех innerTexts, которые являются дочерними для выбранного узла? CoDEmanX
@ CoDEmanX:<div>text1<span>text2</span>text3</div> как я уже сказал, это Массив, такdiv/node()[0] == div/text()[0] == text1 узел иdiv/node()[1] == span узел иdiv/node()[2] == div/text()[1] == text3 узел - вам придется объединить их самостоятельно (вручную или с помощью вспомогательной функции, которая принимает массив). Nikola Bogdanović
3

Новый ответ на старый, часто задаваемый вопрос:

Для этого XML

<div class="myclass">content</div>

Вы можете использовать XPath, чтобы выбрать простоcontent одним из двух способов:

Выбор текстового узла

Это XPath,

//div[@class='myclass']/text()

выберет дочерний текстовый узел целевогоdiv element,content, как просили

Строка Значение элемента

Это XPath,

string(//div[@class='myclass'])

вернетсястроковое значени из целевыхdiv element,content, опять же, как и проси

Дополнительная информация: вотнот объясняя Струнно-значение элементов:

Theстроковое значени узла элемента - это конкатенациястроковое значениs всего текстового узла Потомки узла элемента в порядке документа.

1

// DIV [@ класс = 'MyClass'] / ребенок :: *

child :: * выбирает все дочерние элементы контекстного узласмотрите подробност

Похожие вопросы