Выбор сначала приводит к XPath

Вам необходимо добавить

android: theme = "@ style / Theme.AppCompat"

в файл XML_Layout, в котором вы используете FloatingActionButton ...

9
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

Как вы пробовали закрепить last ()? Думаю, это должно сработать:

/container/container/ancestor-or-self::container/data[@id="1"][last()]

РЕДАКТИРОВАТЬ:

Верно, конечно, я забыл круглые скобки:

(/container/container/ancestor-or-self::container/data[@id="1"])[last()]

Что делает этот ответ таким же, как и один из других ответов; однако, как указано на оригинальном плакате, это выражение не работает:

<container value="">
  <container>
    <data id="1">a3</data>
    <data id="3">a4</data>
  </container>
  <data id="1">a1</data>
  <data id="2">a2</data>
</container>

Верный духу stackoverflow, я могу, однако, объединить свой ответ с одним из других ответов и получить то, что работает во всех случаях:

(/container/container/ancestor-or-self::container[data[@id="1"]])[last()]/data[@id="1"]

Таким образом, если существует несколько дочерних элементов @ id-is-1 одного контейнера, это вернет их всех. Чтобы вернуть только первый такой элемент :

(/container/container/ancestor-or-self::container[data[@id="1"]])[last()]/data[@id="1"][1]
6
ответ дан 4 December 2019 в 11:44
поделиться

Вы пытались вместо

@id="1"

:

position() == 1
0
ответ дан 4 December 2019 в 11:44
поделиться

Я не на 100% понимаю, о чем вы просите, но если я правильно прочитал, возможно, вы просто захотите:

/container/container/ancestor-or-self::container[1]/data[@id='1']

обратите внимание на "[1]"

Править : подумал об этом еще немного, и приведенное ниже работает для меня во всех случаях, пока я искал @ id = $ N

/container/container/ancestor-or-self::container[data[@id=$N]][1]/data[@id=$N]

Довольно экстремальный xpathing прямо здесь. По сути, происходит то, что набор узлов от предка или себя возвращает самый низкий порядок в позиции 1 - это тот, который вы хотите, - но вам нужно поставить второе условие для него, что узел также имеет интересующий вас узел данных, как только вы соблюдаете эти условия, у вас есть нужный узел, теперь вы просто хотите туннелировать дальше к реальным данным.

В 99% случаев xpath станет проще, если вы разобьете его и представите себе как алгоритм :)

1
ответ дан 4 December 2019 в 11:44
поделиться

Убедитесь, что last () имеет правильную область видимости. Попробуйте:

(/container/container/ancestor-or-self::container/data[@id="1"])[last()]

Аналогично:

//container[last()]

и:

(//container)[last()]

- это не одно и то же.

11
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

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