XSLT创建具有相同ID和名称的多个记录
我的XML输入是: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
<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>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
;
您可以在这里尝试:您遇到了哪些困难?缺少名称空间声明是故意的?如果使用XSLT 2或3处理器和
version=“2.0”
或version=“3.0”
可以简化xsl:value的xsl:value,只需选择要输出的节点序列,默认的分隔符仍然是一个空格字符: