XPath 1.0: используйте значение атрибута родителя текущего узла, чтобы найти другой соответствующий узел

xpath xpath-1.0

237 просмотра

1 ответ

Я нашел много похожих сообщений на этот вопрос, но ничего, что отвечало бы на этот конкретный вопрос. Я должен использовать XPath 1.0. У меня нет XSLT (или XQuery или чего-либо еще) для меня, и я не могу использовать XPath 2.0. Я выполняю этот XPath изнутри части программного обеспечения (Arbortext Styler), в которой я могу использовать XPath 1.0 для выбора контента из других узлов, но XSLT в этом контексте недоступен. Кроме того, я не контролирую структуру исходного XML.

Когда я нахожусь в контексте <step>, я должен быть в состоянии соответствовать предыдущей процедуре / задаче / шагу, для которого родительская процедура этого шага совпадает с @ref и @seq текущей процедуры и имеет букву "A" в качестве значения для @conf ,

<document>
  <topic>
    <procedure ref="056" seq="01" conf="A">
      <task>
        <step>1. Blah Blah (056-01-A)</step>
      </task>
    </procedure>
    <procedure ref="057" seq="02" conf="A">
      <task>
        <step>2. Blah blah (057-02-A)</step>
      </task>
    </procedure>
    <procedure ref="057" seq="02" conf="B">
        <task>
            <step>2. Blah blah (057-02-B)</step>
        </task>
    </procedure>
    <procedure ref="057" seq="03" conf="A">
        <task>
            <step>3. Blah blah (057-02-A)</step>
        </task>
    </procedure>
  </topic>
</document>

Мне нужно что-то вроде этого, но без функции current (), которая не поддерживается программным приложением:

//procedure[@ref=current()/ancestor::procedure/@ref and @seq=current()/ancestor::procedure/@seq and @conf='A']/task/step

Или как-то так, но без оператора for в ответ:

for $ref in ancestor::procedure/@ref, $seq in ancestor::procedure/@seq return //topic/procedure[@ref=$ref and @seq=$seq and @conf='A']/task/step/text()

Кто-нибудь есть какие-либо предложения о том, как это может быть достигнуто чисто с XPath 1.0? Обратите внимание, что положение процедуры не может быть жестко закодировано. Дубликаты ссылок могут встречаться несколько раз и в любой позиции. Кроме того, необходимо, чтобы это совпадение было выполнено с начальным контекстом <step>.

Я подозреваю, что ответ на мой вопрос заключается в том, что это невозможно, но я знаю, что если это можно сделать, то это место, где можно найти ответ! Заранее спасибо всем, кто рассматривает этот вопрос.

Этот пост был похож, но поиск искал детей начального контекста: Xpath Получение всех узлов, имеющих атрибут, который соответствует другому узлу

Это также было интересно, но моим значением атрибута не является ID: Xpath: найти значение элемента из совпадения атрибута id с привязкой id

Какие-либо предложения?

Автор: T. Carano Источник Размещён: 26.10.2019 06:24

Ответы (1)


0 плюса

Решение

Как предполагает Томалак и Хонза Хейзл, это невозможно сделать с помощью XPath 1.0. Спасибо за ответ.

Автор: T. Carano Размещён: 08.04.2016 01:13
Вопросы из категории :
32x32