将元素值凹进一行



如何将名称、年龄和国家三个元素连接到一行?

<?xml version="1.0" encoding="utf-8"?>
 <Person>
  <Student>
   <Name>James</Name>
   <Age>21</Age>
   <Country>Australia </Country>
  </Student>
 </Person>

这样我就可以把元素值放到一行。

<info> ....... <info>

简单地做到这一点;

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>

您可以使用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>

如果使用XSLT2.0,则可以在xsl:value-of上使用separator属性。。。

<xsl:template match="Student">
    <info><xsl:value-of select="*" separator=" "/></info>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新