来自变量的 XSLT for-each-group 不起作用
XSLT for-each-group from variable does not work
XSLT 2.0 中的 for-each-group 按预期从文件工作,但不是从变量工作。
有这个文件:
~$猫test.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
使用样式表对此文件进行分组:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes" omit-xml-declaration="no" />
<xsl:template match="*">
<!-- variable not used for file test -->
<xsl:variable name="fields">
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
</xsl:variable>
<xsl:for-each-group select="*" group-starting-with="delimiter">
<field>
<xsl:for-each select="current-group()">
<xsl:value-of select="self::c"/>
</xsl:for-each>
</field>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
我得到了我想要的结果:
<?xml version="1.0" encoding="UTF-8"?>
<field>AB</field>
<field>C</field>
尝试将变量 name="fields" 分组为:
<xsl:for-each-group select="$fields/*" group-starting-with="delimiter">
我得到结果:
<?xml version="1.0" encoding="UTF-8"?>
<field/>
为什么 for-each-group 作用于文件而不作用于变量?
变量fields
是一个document-node(),可以定义变量的类型为element()
<xsl:variable name="fields" as="element()">
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
</xsl:variable>
XSLT 2.0 中的 for-each-group 按预期从文件工作,但不是从变量工作。
有这个文件:
~$猫test.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
使用样式表对此文件进行分组:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes" omit-xml-declaration="no" />
<xsl:template match="*">
<!-- variable not used for file test -->
<xsl:variable name="fields">
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
</xsl:variable>
<xsl:for-each-group select="*" group-starting-with="delimiter">
<field>
<xsl:for-each select="current-group()">
<xsl:value-of select="self::c"/>
</xsl:for-each>
</field>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
我得到了我想要的结果:
<?xml version="1.0" encoding="UTF-8"?>
<field>AB</field>
<field>C</field>
尝试将变量 name="fields" 分组为:
<xsl:for-each-group select="$fields/*" group-starting-with="delimiter">
我得到结果:
<?xml version="1.0" encoding="UTF-8"?>
<field/>
为什么 for-each-group 作用于文件而不作用于变量?
变量fields
是一个document-node(),可以定义变量的类型为element()
<xsl:variable name="fields" as="element()">
<root>
<delimiter/>
<c>A</c><c>B</c>
<delimiter/>
<c>C</c>
</root>
</xsl:variable>