1

xml:

<?xml version="1.0"?>
<student_list>
<ID No="A-1">
<name>Jon</name>
<mark>80</mark>
</ID>
<ID No="A-2">
<name>Ray</name>
<mark>81</mark>
</ID>
</student_list>

我的 xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text" indent="yes"/>

<xsl:template match="/">
    <xsl:apply-templates />
    </xsl:template>

<xsl:template match="//ID">
     ID:string:"
<xsl:value-of select="@No"/>"
          </xsl:template>

    <xsl:template match="name">
      name:string:"<xsl:apply-templates />"
     </xsl:template>

  <xsl:template match="mark">
      mark:string:"<xsl:apply-templates />"
     </xsl:template>

 </xsl:stylesheet>

预期输出: ID:string:"A-1" name:string:"jon" mark:string:"80" ID:string:"A-2" name:string:"Ray" mark:string:"81"

有人请帮忙。


感谢您的回复,真的很棒,我通过更新上面的代码得到了输出,但是我怎样才能在“文本输出”模式下为每一行换行。我尝试使用这个代码:

<xsl:template name="Newline"><xsl:text> 
</xsl:text>
</xsl:template>

line--1
 <xsl:call-template name="Newline" /> 
line--2 

但这并没有给我换行符。任何信息都会有所帮助。再次感谢。

4

1 回答 1

1

问题是namemark元素是ID元素的子元素,但是在与ID匹配的模板中,您没有任何代码来继续处理子元素,因此它们不匹配。

将您的ID匹配模板更改为以下内容:

<xsl:template match="//ID"> 
   ID:string:"<xsl:value-of select="@No"/>" 
   <xsl:apply-templates /> 
</xsl:template> 

如果您担心换行,最好做这样的事情(在哪里用回车换行)

<xsl:template match="//ID">
   <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" />
   <xsl:apply-templates/>
</xsl:template>

或者也许这个......

<xsl:template match="//ID">
   <xsl:text>ID:string:"</xsl:text>
   <xsl:value-of select="@No" />
   <xsl:text>"&#13;</xsl:text>
   <xsl:apply-templates/>
</xsl:template>

这是完整的 XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text" indent="yes"/>

   <xsl:template match="//ID">
      <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" />
      <xsl:apply-templates/>
   </xsl:template>

   <xsl:template match="name|mark">
    <xsl:value-of select="concat(local-name()), ':string:&quot;', ., '&quot;&#13;')" />
   </xsl:template>
</xsl:stylesheet>

这应该会给你预期的结果。

ID:string:"A-1"
name:string:"Jon"
mark:string:"80"
ID:string:"A-2"
name:string:"Ray"
mark:string:"81"

请注意我如何组合名称标记模板以共享代码。

于 2012-07-18T18:08:09.593 回答