Повторение блока тегов в XML с использованием XSLT - PullRequest
1 голос
/ 12 октября 2011

У меня есть другой запрос, который я пробовал, но не могу его выполнить ... Ниже приведен код XML -

<Main>
<Region>
<Division>
<DivName>Abc</DivName>
<Desc>BBB</Desc>
<Info></Info>
</Division>
<Division>
<DivName>Pqr</DivName>
<Desc></Desc>
<Info></Info>
</Division>
<Division>
.
.
.
</Division>
</Region>
</Main>

В теге Division DivName является обязательным, т.е.это будет там, но Desc и Info не обязательны.Также тег Division, который содержит теги Desc, DivName и Info, может появляться только один раз.Таким образом, чтобы отобразить это, я должен использовать для каждого.

Я также хочу разрывы строк между этими тегами.До сих пор я немного пытался с провалом.HTML-вывод, я хочу это

<b>DivName Text</b>
<p>Desc Text, if any</p>
<p>Info Text, if any</p>
<hr/>
<b>DivName Text</b>
<p>Desc Text, if any</p>
<p>Info Text, if any</p>

Заранее спасибо .. Хорошего дня, Джон

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

Это простое преобразование (без <xsl:for-each> и без условий):

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

 <xsl:template match="Division[position() >1]">
     <hr />
     <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="Division/*[text()]">
  <p><xsl:value-of select="."/></p>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML :

<Main>
    <Region>
        <Division>
            <DivName>Abc</DivName>
            <Desc>BBB</Desc>
            <Info>More info abour Abc</Info>
        </Division>
        <Division>
            <DivName>Pqr</DivName>
            <Desc>Pqr desc.</Desc>
            <Info>More info abour Pqr</Info>
        </Division>
    </Region>
</Main>

дает желаемый, правильный результат :

<p>Abc</p>
<p>BBB</p>
<p>More info abour Abc</p>
<hr/>
<p>Pqr</p>
<p>Pqr desc.</p>
<p>More info abour Pqr</p>

И это отображается браузером как :

Abc

В

Подробнее о Abc

<Ч />

ПКР

Pqr desc.

Дополнительная информация о Pqr

0 голосов
/ 12 октября 2011

Как насчет этого:

<xsl:for-each select="Division">
  <xsl:if test="position() != 1">
  <hr/>
  </xsl:if>
  <p><xsl:value-of select="DivName" /></p>
  <xsl:if test="Desc">
    <p><xsl:value-of select="Desc"/></p>
  </xsl:if>
  <xsl:if test="Info">
    <p><xsl:value-of select="Info"/></p>
  </xsl:if>
</xsl:for-each>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...