2012-02-17 4 views
0

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

<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 

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

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

+0

Приведите пример вашего полезного выхода. – Kristofer

+0

И вы хотите распечатать что? Название каждого конкурента на отдельной строке? или? – Kristofer

+0

Привет Кристофер, привык к использованию stackoverflow, я обновил вопрос. Обычно я получаю XML-канал с числом имен от 4 до 40, каждый раз, когда я получаю новый фид, новый макет или дизайн для вывода должны быть сделаны так идеально, разбивая атрибуты индивидуально, я могу отображать их в столбцах и т. д. Это возможно? Извиняюсь за мою суровую новичку, я очень новичок в xsl! – Vedd44

ответ

0

Это просто пример, чтобы направлять вас, в зависимости от вашего выходного формата вы можете захотеть изменить

<br/> 

линия ломает что-то еще, посмотрите на примеры this.

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

Учитывая 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/> 
+0

Приветствия за помощь @ Kristofer. Конечно, это требует некоторого количества времени, но, используя код выше, я должен быть в состоянии сделать что-то, по достоинству оценить его! – Vedd44

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