Xml 为每个循环更新XSLT中的变量值
我有以下XML:Xml 为每个循环更新XSLT中的变量值,xml,xslt,Xml,Xslt,我有以下XML: <Root> <Employee> <Name>Dash</Name> <Age>23</Age> </Employee> <Employee> <Name>Gwen</Name> <Age>22</Age> </Employee> </Root> 猛冲 23
<Root>
<Employee>
<Name>Dash</Name>
<Age>23</Age>
</Employee>
<Employee>
<Name>Gwen</Name>
<Age>22</Age>
</Employee>
</Root>
猛冲
23
格温
22
我需要使用XSLT转换为以下XML:
<Root>
<Employee>
<Name>Dash,Gwen</Name>
<Age>23,22</Age>
</Employee>
</Root>
达什,格温
23,22
我使用for each循环来获取
节点的子节点的值。我面临的问题是,我不知道如何将连接的值存储在XSLT中的另一个Temperary变量中。我在许多网站上发现,我们无法更新XSLT中的变量,那么有没有其他解决方案呢?这样行吗
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:value-of select="Employee/Name" separator="," />
</Name>
<Age>
<xsl:value-of select="Employee/Age" separator="," />
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
这样行吗
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:value-of select="Employee/Name" separator="," />
</Name>
<Age>
<xsl:value-of select="Employee/Age" separator="," />
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
这样行吗
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:value-of select="Employee/Name" separator="," />
</Name>
<Age>
<xsl:value-of select="Employee/Age" separator="," />
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
这样行吗
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:value-of select="Employee/Name" separator="," />
</Name>
<Age>
<xsl:value-of select="Employee/Age" separator="," />
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
请尝试以下样式表:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:for-each select="Employee/Name">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Name>
<Age>
<xsl:for-each select="Employee/Age">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
,
,
或者作为另一种选择
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:apply-templates select="Root/Employee[1]"/>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Employee[1]/Name|Employee[1]/Age">
<xsl:variable name="curr_name" select="name()"/>
<xsl:copy>
<xsl:value-of select="."/>
<xsl:for-each select="following::*[name()=$curr_name]">
<xsl:text>,</xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
请尝试以下样式表:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:for-each select="Employee/Name">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Name>
<Age>
<xsl:for-each select="Employee/Age">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
,
,
或者作为另一种选择
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:apply-templates select="Root/Employee[1]"/>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Employee[1]/Name|Employee[1]/Age">
<xsl:variable name="curr_name" select="name()"/>
<xsl:copy>
<xsl:value-of select="."/>
<xsl:for-each select="following::*[name()=$curr_name]">
<xsl:text>,</xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
请尝试以下样式表:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:for-each select="Employee/Name">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Name>
<Age>
<xsl:for-each select="Employee/Age">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
,
,
或者作为另一种选择
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:apply-templates select="Root/Employee[1]"/>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Employee[1]/Name|Employee[1]/Age">
<xsl:variable name="curr_name" select="name()"/>
<xsl:copy>
<xsl:value-of select="."/>
<xsl:for-each select="following::*[name()=$curr_name]">
<xsl:text>,</xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
请尝试以下样式表:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="Root">
<Root>
<Employee>
<Name>
<xsl:for-each select="Employee/Name">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Name>
<Age>
<xsl:for-each select="Employee/Age">
<xsl:if test="position() > 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</Age>
</Employee>
</Root>
</xsl:template>
</xsl:stylesheet>
,
,
或者作为另一种选择
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<Root>
<Employee>
<xsl:apply-templates select="Root/Employee[1]"/>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Employee[1]/Name|Employee[1]/Age">
<xsl:variable name="curr_name" select="name()"/>
<xsl:copy>
<xsl:value-of select="."/>
<xsl:for-each select="following::*[name()=$curr_name]">
<xsl:text>,</xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
,
这就是我所说的“为两者使用通用模板并避免代码重复”:
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Root">
<Root>
<Employee>
<Name>
<xsl:apply-templates select="Employee/Name"/>
</Name>
<Age>
<xsl:apply-templates select="Employee/Age"/>
</Age>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Name|Age">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
,
在这里,我还要指出,这将用一个非常有问题的XML结构替换一个坚实的XML结构。我不确定此转换的目的是什么,但结果是一个XML,下游应用程序可能很难使用它。这就是我所说的“使用通用模板,避免代码重复”: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Root">
<Root>
<Employee>
<Name>
<xsl:apply-templates select="Employee/Name"/>
</Name>
<Age>
<xsl:apply-templates select="Employee/Age"/>
</Age>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Name|Age">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
,
在这里,我还要指出,这将用一个非常有问题的XML结构替换一个坚实的XML结构。我不确定此转换的目的是什么,但结果是一个XML,下游应用程序可能很难使用它。这就是我所说的“使用通用模板,避免代码重复”: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Root">
<Root>
<Employee>
<Name>
<xsl:apply-templates select="Employee/Name"/>
</Name>
<Age>
<xsl:apply-templates select="Employee/Age"/>
</Age>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Name|Age">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
,
在这里,我还要指出,这将用一个非常有问题的XML结构替换一个坚实的XML结构。我不确定此转换的目的是什么,但结果是一个XML,下游应用程序可能很难使用它。这就是我所说的“使用通用模板,避免代码重复”: XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/Root">
<Root>
<Employee>
<Name>
<xsl:apply-templates select="Employee/Name"/>
</Name>
<Age>
<xsl:apply-templates select="Employee/Age"/>
</Age>
</Employee>
</Root>
</xsl:template>
<xsl:template match="Name|Age">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
,