2016-02-01 4 views
-1

я могу соответствовать на п или р элемента, но мое требование находится в выходном XML последний й (& & &) в теге должны быть добавлены к последнему элементу р е некоторым p5 текст & & &. должен быть выходным.XSLT Issue добавление к последнему определенному элементу

<clause> 
    <ei>$$$</ei> 
    <p>some p1 text</p> 
    <p>some p2 text</p> 
    <clause2> 
     <p>some p3 text</p> 
     <p>some p4 text</p> 
     ... 
     ... 
     <p>some p5 text</p> 
    </clause2> 
    <ei>&&&</ei> 
</clause> 
+1

Я не вижу XSLT, так что ваш вопрос не может быть решен из-за отсутствия ввода. – usr2564301

+0

@ Jongware на самом деле я ищу XSLT-код, это всего лишь xml. Мне нужен шаблон xslt, который может совпадать с любым предложением/p и добавить последнее значение ei в элементе к последнему элементу p. Надеюсь, это поможет. – user3496151

+1

@ user3496151 "* Я ищу XSLT-код *" не вопрос. Где именно у вас проблема с этим? –

ответ

0

Используйте этот XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:fn="http://www.w3.org/2005/xpath-functions" 
       xmlns:str="http://exslt.org/strings" 
       extension-element-prefixes="fn str"> 

    <xsl:output method="xml" version="1.0" indent="yes"/> 
    <xsl:strip-space elements="*"/>                                  

    <xsl:template match="/"> 
     <xsl:apply-templates select="/node()"/> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:element name="{name(.)}"> 
      <xsl:copy-of select="./@*"/> 
      <xsl:apply-templates select="./node()"/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="."/> 
    </xsl:template> 

    <xsl:template match="clause2[last()]/p[last()]"> 
     <xsl:element name="{name(.)}"> 
      <xsl:copy-of select="./@*"/> 
      <xsl:apply-templates select="./node()"/> 
      <xsl:copy-of select="/clause/ei[last()]/node()"/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="/clause/ei[last()]"> 
    </xsl:template> 
</xsl:stylesheet> 

Тест: http://xsltransform.net/bFN1y9H/2

+0

Предлагаю вам ознакомиться с шаблоном 'xsl: copy' в целом и шаблоном * преобразования идентификатора * в частности, а также встроенными шаблонами. Это должно сократить ваш код примерно до половины. –

+0

Спасибо @ michael.hor257k. просто '10' линия меньше: http://xsltransform.net/bFN1y9H/4 – pouyan

+0

Подсчет строк не является самой важной метрикой. Тем не менее, http://xsltransform.net/bFN1y9H/5 –

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