如何将三个元素的名称,年龄和国家连接到一行?
<?xml version="1.0" encoding="utf-8"?>
<Person>
<Student>
<Name>James</Name>
<Age>21</Age>
<Country>Australia </Country>
</Student>
</Person>
所以我可以将元素值放到一行。
<info> ....... <info>
答案 0 :(得分:1)
简单就是这样做;
<强> XSL:强>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Student">
<xsl:element name = "Info">
<xsl:value-of select="concat(Name,' is ',Age,' born in ',Country)"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
刚刚添加了可以删除它的额外文本或者''(它为空白),这样就可以获得空格。
<强>输出:强>
<?xml version="1.0" encoding="UTF-8"?>
<Info>James is 21 born in Australia </Info>
有空格;
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Student">
<xsl:element name = "Info">
<xsl:value-of select="concat(Name,' ',Age,' ',Country)"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
<?xml version="1.0" encoding="UTF-8"?>
<Info>James 21 Australia </Info>
答案 1 :(得分:0)
您可以使用xsl:value-of
...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Student">
<info><xsl:value-of select="."/></info>
</xsl:template>
</xsl:stylesheet>
但是,您的值之间不会有任何空格:
<Person>
<info>James21Australia </info>
</Person>
相反,您可以使用xsl:apply-templates
并匹配Student
的每个子项,并在必要时输出空格...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Student">
<info><xsl:apply-templates/></info>
</xsl:template>
<xsl:template match="Student/*">
<xsl:if test="not(position()=1)">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
...输出
<Person>
<info>James 21 Australia </info>
</Person>
如果您使用的是XSLT 2.0,则可以使用separator
上的xsl:value-of
属性...
<xsl:template match="Student">
<info><xsl:value-of select="*" separator=" "/></info>
</xsl:template>