Может ли XPath выполнить поиск по внешнему ключу в двух поддеревьях XML?

StackOverflow https://stackoverflow.com/questions/142010

Вопрос

Допустим, у меня есть следующий XML-файл...

<root>
  <base>
    <tent key="1" color="red"/>
    <tent key="2" color="yellow"/>
    <tent key="3" color="blue"/>
  </base>
  <bucket>
    <tent key="1"/>
    <tent key="3"/>
  </bucket>
</root>

...каким будет XPath, который возвращает, что "корзина" содержит "красный" и "синий"?

Это было полезно?

Решение

Если вы используете XSLT, я бы рекомендовал настроить ключ:

<xsl:key name="tents" match="base/tent" use="@key" />

Затем вы можете получить <tent> внутри <base> с определенным key используя

key('tents', $id)

Тогда вы можете сделать

key('tents', /root/bucket/tent/@key)/@color

или, если $bucket является конкретным <bucket> элемент,

key('tents', $bucket/tent/@key)/@color

Другие советы

Я думаю, это сработает:

/root/base/tent[/root/bucket/tent/@key = @key ]/@color

Это некрасиво.Как и при любом поиске, вам нужно использовать current():

/root/ведро[/root/база/палатка[@key = current()/палатка/@key]/@color = 'синий' или /root/база/палатка[@key = current()/палатка/@key]/@color = 'красный']

У JeniT есть соответствующий ответ / код, указанный здесь.Вам нужно создать ключ перед переходом к XML-документу, а затем выполнить сопоставление с этим ключом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top