的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:字符串: “A-1” 名称:字符串:“乔恩” 标志:字符串: “80后” ID:字符串: “A-2” 名称:字符串:“雷人” 标记:字符串: “81”
有些人帮助。感谢您的回复,真的很棒我通过更新上面的代码获得了输出,但是如何在“文本输出”模式中为每一行获取换行符。我尝试使用此代码:
<xsl:template name="Newline"><xsl:text>
</xsl:text>
</xsl:template>
line--1
<xsl:call-template name="Newline" />
line--2
但这并没有让我换线。任何信息都会有所帮助。再次感谢。
答案 0 :(得分:1)
问题是名称和标记元素是 ID 元素的子元素,但在您的模板中与匹配ID 您没有任何代码可以继续处理子项,因此它们不匹配。
将 ID 匹配模板更改为以下内容:
<xsl:template match="//ID">
ID:string:"<xsl:value-of select="@No"/>"
<xsl:apply-templates />
</xsl:template>
如果您担心新线路,那么做这样的事情可能会更好(其中&#13;是回车以获得新线路)
<xsl:template match="//ID">
<xsl:value-of select="concat('ID:string:"', @No, '" ')" />
<xsl:apply-templates/>
</xsl:template>
或许这个....
<xsl:template match="//ID">
<xsl:text>ID:string:"</xsl:text>
<xsl:value-of select="@No" />
<xsl:text>" </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:"', @No, '" ')" />
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="name|mark">
<xsl:value-of select="concat(local-name()), ':string:"', ., '" ')" />
</xsl:template>
</xsl:stylesheet>
这应该会给出您期望的结果。
ID:string:"A-1"
name:string:"Jon"
mark:string:"80"
ID:string:"A-2"
name:string:"Ray"
mark:string:"81"
请注意我如何将名称和标记的模板组合在一起以共享代码。