是否有一种方法可以收集标记值的元素名称?我一直在尝试这样做,但是它给了我一个错误“Saxon 9.6.0.7 XPTY0004: name()的第一个参数的必需项类型是节点();提供的值有项目类型xs:string”
以下是我的一组样本数据:
<SET>
<REAL_TAGNAME> 1 2 3 4 </REAL_TAGNAME>
</SET> 如果我使用了这个代码:
<xsl:for-each select="SET/REAL_TAGNAME">
<xsl:for-each select="tokenize(normalize-space(.),'\s+')">
<Hardcode_Tag>
<xsl:value-of select="."/>
</Hardcode_Tag>
</xsl:for-each>
</xsl:for-each>然后,我将成功地拥有以下内容:
<Hardcode_Tag>1</Hardcode_Tag>
<Hardcode_Tag>2</Hardcode_Tag>
<Hardcode_Tag>3</Hardcode_Tag>
<Hardcode_Tag>4</Hardcode_Tag>但是我想摆脱硬编码,我想使用它原来的标签名来实现这样的功能:
<REAL_TAGNAME>1</REAL_TAGNAME>
<REAL_TAGNAME>2</REAL_TAGNAME>
<REAL_TAGNAME>3</REAL_TAGNAME>
<REAL_TAGNAME>4</REAL_TAGNAME>当我在下面尝试使用xsl:元素时,它一直给我一个上面提到的错误:
<xsl:for-each select="SET/REAL_TAGNAME">
<xsl:for-each select="tokenize(normalize-space(.),'\s+')">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:for-each>有人知道我怎么解决这个问题吗?提前感谢您的帮助!
发布于 2016-03-10 22:27:48
在xsl:for-each中,表达式。引用当前项,即从元素的字符串值中提取的当前令牌。如果要记住输入for-each之前的当前元素的名称,只需在内部xsl:for-each之前设置一个变量:
<xsl:for-each select="SET/REAL_TAGNAME">
<xsl:variable name="element-name" select="name(.)"/>
<xsl:for-each select="tokenize(normalize-space(.),'\s+')">
<xsl:element name="{$element-name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:for-each>当然,在您显示的代码中,$element-name的值总是“REAL_TAGNAME”。我想一般情况下都不是这样的。
https://stackoverflow.com/questions/35928333
复制相似问题