Вам необходимо добавить
android: theme = "@ style / Theme.AppCompat"
в файл XML_Layout, в котором вы используете FloatingActionButton ...
Как вы пробовали закрепить 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]
Я не на 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 станет проще, если вы разобьете его и представите себе как алгоритм :)
Убедитесь, что last ()
имеет правильную область видимости. Попробуйте:
(/container/container/ancestor-or-self::container/data[@id="1"])[last()]
Аналогично:
//container[last()]
и:
(//container)[last()]
- это не одно и то же.