xsl: match и xsl: применяются внутри одного и того же родителя - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть следующая структура xml (в реальном примере она намного длиннее и сложнее)

<document>
    <node1>
       <child1/>
       <child2/>
       ...
  </node1>
  <anotherNode />
</document>

Я хочу создать шаблон типа

<xsl:template match="node1" mode="node1">
        <img alt="" src="{child1}" />
        ...
        ...

</xsl:template>

и применить егошаблон в другом шаблоне, подобном этому

<xsl:template match="anotherNode">
    <xsl:apply-templates select="node1" mode="node1" />
</xsl:template>

Если бы у тега node1 был родитель, это было бы легко сделать, но я не могу понять, как сопоставить и применить шаблон, если у него нет родителя.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Использование :

<xsl:template match="anotherNode"> 
    <xsl:apply-templates select="/*/node1" mode="node1" /> 
</xsl:template> 

Или альтернативно :

<xsl:template match="anotherNode"> 
    <xsl:apply-templates select="../node1" mode="node1" /> 
</xsl:template> 
1 голос
/ 15 февраля 2012

Хорошо, размещенный ввод даже не правильно сформирован (опечатка "docuemnt" в начальном теге корневого элемента?), И отступ также неясен, но до тех пор, пока элемент anotherNode и элементы node1братья и сестры вы можете сделать

<xsl:template match="anotherNode">
  <xsl:apply-templates select="preceding-sibling::node1" mode="node1"/>
</xsl:template>
1 голос
/ 15 февраля 2012

Вам необходимо использовать родительскую ось , (.. в сокращенный синтаксис ).

Все элементы в документе имеют родителя (см. DOM3 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...