2014-02-20 3 views
-2

В моем XML,Необходимо выбрать конкретный элемент, кроме его одним из потомка

<section level="2"> 
    <heading class="hdgautonum2" level="2"> 
     <inline style="\-ilx-tab-stops: left blank 0tw; "> 
      <gentext type="headingnumberstring">1.5 </gentext> 
      <deleted author="Michele Staple" date="Wed, 17 Aug 2011 18:18:00 BST">Overview</deleted> 
      <inserted author="Michele Staple" date="Wed, 17 Aug 2011 18:18:00 BST">Chapter summary</inserted> 
     </inline> 
    </heading> 
... 
</section> 

и, на мой XSLT,

<xsl:for-each select="child::section[@level='2']"> 
<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//*[not(name()='deleted')]) else heading"/> 

примечание: я не нужно deleted к выходу, так , я сделал, что исключительные (я имею в виду не())

, но я эта ошибка

XPTY0004: Последовательность более одного элемента не допускается в качестве первого аргумента подстроки() («1.5 резюме OverviewChapter», «1,5», ...)

Моя цель состоит в том, чтобы выбрать heading и все его потомки, за исключением deleted содержимого элемента, если элемент заголовка имеет inserted. Кроме того, просто выбрать только элемент heading. Иногда элемент заголовка имеет элемент inserted, или может не быть.

Имею ли я смысл?

+2

Там нет использование 'substring' функции в фрагменте кода вы в комплект поставки. Что вы на самом деле пытаетесь достичь здесь? –

+0

Ошибка указывает на функцию подстроки, но вы не показываете ее в своем XSLT. Можете ли вы обновить свой вопрос, чтобы показать больше XML и XSLT? –

+0

Привет: Я отредактировал свой вопрос, пожалуйста, посмотрите – Sakthivel

ответ

0

хорошо, это выстрел в темноте. Вы можете заменить

<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//*[not(name()='deleted')]) else heading"/> 

с

<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//* except descendant::deleted) else heading"/> 

использования XSL 2,0

+0

@ Lamsen: Я получаю ту же ошибку. Я использую только xslt 2.0. Я уже пробовал это. – Sakthivel

+0

Затем найдите подстроку, которая вызывает ошибку. Я уверен, что ошибка не была в приведенном выше коде. –

Смежные вопросы