XSLT创建具有相同ID和名称的多个记录

XSLT创建具有相同ID和名称的多个记录,xslt,Xslt,我的XML输入是: <vb:Report> <vb:ID>1111</vb:ID> <vb:name>tinker bell</vb:name> <vb:experience > <vb:title>Consultant1</vb:title> <vb:company>Coke</vb:c

我的XML输入是:

<vb:Report>
        <vb:ID>1111</vb:ID>
        <vb:name>tinker bell</vb:name>
        <vb:experience >
            <vb:title>Consultant1</vb:title>
            <vb:company>Coke</vb:company>
            <vb:startend>04/01 - 04/30</vb:startend>
        </vb:experience>
        <vb:experience>
            <vb:title> Consultant2</vb:title>
            < vb:company>Pepsi</vb:company >
            <vb:startend>05/01 - 04/30</vb:startend>
        </vb:experience>
</vb:report>

谢谢。

确保您的输入XML包含名称空间声明,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<XMLRoot xmlns:vb="http://www.vb.org/someNS">
    <vb:Report>
        <vb:ID>1111</vb:ID>
        <vb:name>tinker bell</vb:name>
        <vb:experience >
            <vb:title>Consultant1</vb:title>
            <vb:company>Coke</vb:company>
            <vb:startend>04/01 - 04/30</vb:startend>
        </vb:experience>
        <vb:experience>
            <vb:title> Consultant2</vb:title>
            <vb:company>Pepsi</vb:company >
            <vb:startend>05/01 - 04/30</vb:startend>
        </vb:experience>
    </vb:Report>
</XMLRoot>

1111
小叮当
顾问1
焦炭
04/01 - 04/30
顾问2
百事可乐
05/01 - 04/30
然后执行XSLT转换以提供所需的输出:

1111 tinker bell Consultant1 Coke 04/01 - 04/30 
1111 tinker bell Consultant2 Pepsi 05/01 - 04/30
<?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:vb="http://www.vb.org/someNS"
    version="1.0">

  <xsl:output method="text"/>

  <xsl:template match="vb:Report">
      <xsl:apply-templates select="vb:experience"/>
  </xsl:template>

  <xsl:template match="vb:experience">
    <xsl:value-of select="concat(
                            preceding-sibling::vb:ID[1],' ',
                            preceding-sibling::vb:name[1],' ',
                            vb:title,' ',
                            vb:company,' ',
                            vb:startend)"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>

</xsl:stylesheet>

您可以在这里尝试:

您遇到了哪些困难?缺少名称空间声明是故意的?如果使用XSLT 2或3处理器和
version=“2.0”
version=“3.0”
可以简化
xsl:value的
xsl:value,只需选择要输出的节点序列,默认的
分隔符仍然是一个空格字符: