2013-10-14 3 views
0

Предположим, что я в настоящее время этот код:Как выбрать первый элемент, следующий за родителем элемента в XSLT?

<p> 
    <greeting> 
     <a name="hello">Hello!</a> 
    </greeting> 
</p> 
<ul> 
    <p>This paragraph needs to be selected</p> 
</ul> 

В принципе, в то же время в <a> элемент в первой части, мне нужно, чтобы выбрать все дочерние <ul> элемента ниже. Есть ли способ сделать это в XSLT?

+0

Строго говоря, ваш XML не является корректным, потому что ему не хватает одного корневого элемента. Можем ли мы считать, что ваш образец является всего лишь фрагментом, и фактический XML хорошо сформирован (если нет, использование XSLT будет проблематичным!) –

+0

@TimC, это правильно, это был всего лишь образец. –

ответ

1

Предполагая вы были расположены на в элемент, то либо из следующих двух выражений будет работать

<xsl:value-of select="../../following-sibling::ul[1]/p" /> 

<xsl:value-of select="ancestor::p[1]/following-sibling::ul[1]/p" /> 

T он сначала предполагает, что a является «великим ребенком» в этом случае, тогда как второй будет работать с a на любом уровне, но предполагает, что соответствующий «предок», который вы хотите проверить, всегда равен p ,

+0

Спасибо за ответ, похоже, что он будет работать (просто позвольте мне сначала проверить его). Я немного побеседовал с «следующим братом», но, видимо, сделал что-то не так. –

0

В идеале вам необходимо знать родителя <p> и <ul>. Если предположить, что элемент <x>, вы выбрали бы, что с помощью оси предка, затем добавьте путь к потомкам, которые вы хотите:

<xsl:copy-of select="ancestor::x/ul/*"> 

Или, если это переменная, которую можно использовать подстановочные:

<xsl:copy-of select="ancestor::*[3]/ul/*"> 
Смежные вопросы