У меня есть структура XML, представляющая логическое деривация, и она выглядит так:
<derivation>
<step name="foo">
<derive>[...]</derive>
<by>[...]</by>
</step>
<step name="bar">
<derive>[...]</derive>
<by>
<from name="foo"/>, conjunction elimination
</by>
</step>
<step name="baz">
<derive>[...]</derive>
<by>
<from name="bar"/>, existential quantification
</by>
</step>
[...]
</derivation>
Каждый <step>
в деривации имеет номер - например, что с name="foo"
будетчисло 1
, которое с name="bar"
будет числом 2
, что с name="baz"
будет числом 3
и так далее.Находясь внутри <step>
, я могу найти номер с <xsl:number/>
.Пока все хорошо.
Теперь, , где встречается элемент <from name="bar"/>
, я хочу, чтобы он был заменен номером элемента <step>
на name="bar"
.Здесь нужно решить три подзадачи:
- Найти самого последнего предка элемента
<from>
, который является <derivation>
. - Из этого найдите первого потомка, который
<step>
элемент с name="bar"
.В приведенном выше примере это будет второй дочерний элемент <derivation>
. - Идентифицирует номер этого элемента.В приведенном выше примере это будет
2
.
Может ли кто-нибудь связать воедино решения этих подзадач, чтобы удовлетворить мое требование?