如何在XSLT中用符号(;)分隔相似的数据元素

如何在XSLT中用符号(;)分隔相似的数据元素,xslt,xslt-2.0,xslt-grouping,xslt-3.0,Xslt,Xslt 2.0,Xslt Grouping,Xslt 3.0,我的源代码如下。我有不同值的相似数据元素。下面的例子中,我有3个电话号码,我想用一个分隔符(;)将所有电话号码放在一行中,我使用了连接功能,但没有使用 <?xml version="1.0" encoding="UTF-8"?> <report_entry> <report_data> <Phone_Numbers_-_Home Descriptor="+44 (233) 45666"> <ID type="WID"&

我的源代码如下。我有不同值的相似数据元素。下面的例子中,我有3个电话号码,我想用一个分隔符(;)将所有电话号码放在一行中,我使用了连接功能,但没有使用

<?xml version="1.0" encoding="UTF-8"?>
<report_entry>
<report_data>
    <Phone_Numbers_-_Home Descriptor="+44 (233) 45666">
        <ID type="WID">16001e91f6ba1ewa583d2eafc901baa6</ID>
    </Phone_Numbers_-_Home>
    <Phone_Numbers_-_Home Descriptor="+44 (234) 56777">
        <ID type="WID">16001ewsf6ba108a584e5d776077bbe3</ID>
    </Phone_Numbers_-_Home>
    <Phone_Numbers_-_Home Descriptor="+44 (123) 23450987">
        <ID type="WID">16001e91f6ba1b8a582ab3e49446b92c</ID>
    </Phone_Numbers_-_Home>
</report_data>
我正在使用下面的代码,其中符号(;)位于不需要的字符串末尾。我需要在b/w中输入电话值,而不需要在最后一个值的末尾

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"  
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:output method="text" omit-xml-declaration="yes"></xsl:output>

<xsl:template match="/report_entry/report_data">      

    <xsl:value-of select="Phone_Numbers_-_Home/@Descriptor"/> <xsl:value-of select="';'"/>


</xsl:template>


应该很容易找到一种方法分离
xsl:value of select=“Phone\u Numbers\u-\ u Home/@Descriptor”
选择的项目,只需查看规范,就可以找到一个名为
separator的属性,因此
就是您所需要的一切。


<xsl:template match="//Phone_Numbers_-_Home">
        <xsl:value-of select="@Descriptor"/>
        <xsl:if test="not(position()= last())">
            <xsl:text>;</xsl:text>
        </xsl:if>
   </xsl:template>
;

检查此答案

为了实现您想要的输出,我们有多种方法,如concat()、string-join()和@Martin use@separator:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    exclude-result-prefixes="xs xd"
    version="2.0">

    <xsl:output method="text" omit-xml-declaration="yes"/>

    <xsl:template match="/report_entry/report_data">
      <!--  <xsl:value-of select="Phone_Numbers_-_Home/@Descriptor" separator="; "/>-->
        <xsl:value-of select="string-join(Phone_Numbers_-_Home/@Descriptor, '; ')"/>
    </xsl:template>

</xsl:stylesheet>

按照imran建议的其他方法。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    exclude-result-prefixes="xs xd"
    version="2.0">

    <xsl:output method="text" omit-xml-declaration="yes"/>

    <xsl:template match="/report_entry/report_data">
      <!--  <xsl:value-of select="Phone_Numbers_-_Home/@Descriptor" separator="; "/>-->
        <xsl:value-of select="string-join(Phone_Numbers_-_Home/@Descriptor, '; ')"/>
    </xsl:template>

</xsl:stylesheet>