2016-10-10 2 views
1

Мне нужно определить первый элемент заголовка и распечатать специальный комментарий перед этим первым элементом заголовка.XSL Transformation: Count Elements

<xsl:template match="title[string-length(.) &gt; 0]" mode="content"> 
    <xsl:comment>%title id="<xsl:value-of select="."/>"%</xsl:comment> 
</xsl:template> 

я могу обнаружить эти элементы заглавия, но то, что я должен сделать, чтобы рассчитывать и получить этот специальный комментарий перед первым элементом заголовка?

EDIT: Спасибо за комментарии, но я не могу заставить его работать к несчастью. Поэтому дополнительно добавляю источник XML здесь, может быть, кто-то может указать мне на элегантное решение?

<body id="EL_bodyN10001"><text id="EL_textN10001"><page id="EL_pageN10004"><p id="EL_pN10006"></p><p id="EL_pN10012">lorem ipsum dolor sit</p><p id="EL_pN10045">msdfsdkfh sdfsfksd sfsdfsdfsdfdsfh <strong id="EL_strongN1004C">LOREM IPSUM</strong>. lorem aklsjd asda sdasjdlkjaksld</p> 
<title id="EL_titleN10001">my first title here</title> 
<subheading id="EL_subheadingN1006E" level="1">MY FIRST SUBHEADING</subheading><p id="EL_pN10075">sdfjlksjfsjdf sfsjfljsdf sfklöskdfö sdfölksföksölf sdfksfk</p><p id="EL_pN10084">tzputozu lultpülupützu tultlutzulztu wewe rrtrt.</p><title id="EL_titleN10001">my second title</title><subheading id="EL_subheadingN100D9" level="1">THIS IS MY SECONT SUBHEADING</subheading><p id="EL_pN100E0">this is another senseless paragraph test.</p></page></text></body> 
+0

ли все 'title' элементы братья и сестры одного и того же родителя? Тогда 'match =" title [normalize-space()] [1] "' достаточно. Или вы можете проверить, нет ли 'previous :: title'. –

+0

Да, элементы являются единственными братьями из одного и того же родителя. Спасибо за подсказку. Я попробовал это так: \t \t \t \t \t \t \t \t \t XXX ПЕРВЫЙ% название ID =" "% \t \t \t \t \t \t \t \t \t \t \t % заголовке ID = "" % \t \t \t \t \t \t \t Не работает, и я не знаю почему – michbeck

+0

Что вы считаете? – Flynn1179

ответ

0

наконец раствор с помощью:

<xsl:variable name="subHeadingPos" select="count(./preceding-sibling::subheading)+1"/> 

Благодаря вам, ребята

0

Попробуйте

<xsl:template match="title[string-length(.) &gt; 0][1]" mode="content"> <xsl:comment>XXX FIRST %title id="<xsl:value-of select="."/>"%</xsl:comment> </xsl:template>

затем записать второй шаблон match="title[string-length(.) &gt; 0][position() > 1]" с другим содержанием.