2013-05-15 6 views
1
<chapter> 
    <concept> 
     <title>*********************</title> 
    . 
    . 
    </concept> 

    <sections> 
     <title>*******************</title> 

</chapter> 

В приведенной выше структуре Я хотел бы получить текст с <concept><title> или <sections><title>. т. е. используя одно условие xpath, мне нужно значение с нижеследующими условиями.XPATH для отображения на основе условного значения

1) если <concept><title> не появился, то <sections><title>. наоборот, также ..

2) Оба названия доступны там, тогда я хочу рассмотреть приблизительное значение узла. то есть в вышеуказанной структуре «<sections><title>» является последним узлом.

ответ

0

Таким образом, вы просто хотите, чтобы последние concept/title или sections/title, что происходит под chapter? Это XPath должен сделать это (предполагая, что текущий контекст является chapter:

(concept/title | sections/title)[last()] 
1

Вы хотите «ближайший» (первый) из двух:

(/*/*[self::concept or self::sections]/title)[1] 

Если вы хотите, чтобы «последнее» (последний) из них, использовать:

(/*/*[self::concept or self::sections]/title)[last()] 

XSLT - на основе проверки:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "(/*/*[self::concept or self::sections]/title)[1]"/> 
=============== 
    <xsl:copy-of select= 
    "(/*/*[self::concept or self::sections]/title)[last()]"/> 
</xsl:template> 
</xsl:stylesheet> 

Когда это преобразование применяется на следующий документ XML:

<chapter> 
    <concept> 
     <title>*********Title 1************</title> 
    . 
    . 
    </concept> 

    <sections> 
     <title>**********Title 2*********</title> 
    </sections> 

</chapter> 

двух выражений XPath вычисляются и их результаты копируются в выход:

<title>*********Title 1************</title> 
=============== 
<title>**********Title 2*********</title> 
+0

Это выглядит хорошо для меня. –

+0

@ hr_117, Добро пожаловать. Да, это более эффективно, чем указание первого узла из объединения, если не известно, что этот процессор XPath используется, оптимизирует такие выражения. –

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