使用XSLT将XML Feed拆分为行

时间:2012-02-17 10:32:45

标签: xml xslt xslt-1.0

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 :(得分: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/>