XSLT:获取 "Tokenized Item" 的元素名称
XSLT: Get Element Name of "Tokenized Item"
有没有办法收集标记化值的元素名称?我一直在尝试这样做,但它给了我一个错误“[Saxon-PE 9.6.0.7] XPTY0004:name() 的第一个参数的必需项目类型是 node();提供的值具有项目类型 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:element 时,它一直给我上面提到的错误:
<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>
有人知道我该如何解决这个问题吗?预先感谢您的帮助!
在 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'。我假设在一般情况下这不是真的。
有没有办法收集标记化值的元素名称?我一直在尝试这样做,但它给了我一个错误“[Saxon-PE 9.6.0.7] XPTY0004:name() 的第一个参数的必需项目类型是 node();提供的值具有项目类型 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:element 时,它一直给我上面提到的错误:
<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>
有人知道我该如何解决这个问题吗?预先感谢您的帮助!
在 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'。我假设在一般情况下这不是真的。