Разделение подачи XML на строки с помощью XSLT - PullRequest
0 голосов
/ 17 февраля 2012

Новое в stackoverflow и XML и XSLT. Я получаю внешние XML-каналы, которые нельзя редактировать и которые преобразуются только для вывода с использованием XSLT. Например, XML-канал может выглядеть так:

<competition name="Comp1">
<event name="test1">

<competitor name="competitor1">
<competitor name="competitor2">
<competitor name="competitor3">

</event>
</competition>

и стандарт xsl

<xsl:template match="event">

<xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>

</xsl:template>

выведет следующее:

competitor1
competitor2
competitor3

Есть ли способ напечатать имя отдельно? т.е. «Конкурент1» сам по себе, а затем, где мне нужно, я мог напечатать «Конкурент2». это возможно?

Полагаю, мне придется разделить имя конкурента, но опять же я не могу отредактировать файл XML, поэтому не уверен, какой подход выбрать. Более того, система, в которой отображается вывод, не будет работать с html.

Updated

Желаемый результат будет выглядеть примерно так:

competitor1              competitor2            competitor3

делая это, я могу организовать вывод так, как мне нужно, т.е. как выше

Действительно ценю любую помощь, Заранее спасибо

1 Ответ

0 голосов
/ 17 февраля 2012

Это просто пример, который поможет вам, в зависимости от вашего выходного формата, вы можете захотеть изменить разрывы строк

<br/>

на что-то другое, взгляните на этот постдля примеров.

Форматирование вывода текста (пробелы / табуляции / переносы строк и т. д.) всегда немного сложно сделать правильно, поэтому будьте готовы потратить некоторое время с ним.

Учитывая XML:

<competition name="Comp1">
  <event name="test1">
    <competitor name="competitor1"/>
    <competitor name="competitor2"/>
    <competitor name="competitor3"/>
  </event>
  <event name="test2">
    <competitor name="competitorX"/>
    <competitor name="competitorY"/>
    <competitor name="competitorZ"/>
  </event>
</competition>

Со следующим xslt:

<?xml version="1.0"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
<xsl:apply-templates/>
  </xsl:template>

<xsl:template match="competition/event">
    <xsl:value-of select="@name" />
    <br/>
    <xsl:apply-templates/>
    <br/>
</xsl:template>

<xsl:template match="competitor">
      <xsl:value-of select="@name" />
      <xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>

Даст вам следующий вывод:

test1
<br/>
competitor1 competitor2 competitor3
<br/>
test2
<br/>
competitorX competitorY competitorZ
<br/>
...