这是我的第一个帖子 - 希望有人能知道答案!我已经找到了许多问题的解决方案,但对于这个问题还没有。
我有一个包含格式规范的XML文件,像这样:
<Format>
<TagNr>92</TagNr>
<Option>A</Option>
<Format>//[N]15d</Format>
</Format>
<Format>
<TagNr>92</TagNr>
<Option>B</Option>
<Format>//3!a/3!a/15d</Format>
</Format>
TagNr + option是此节点集中的唯一组合。
我定义了一个关键字,以使使用格式集更加容易:
<xsl:key name="xx" match="//Format/Format" use="concat(../TagNr, ../Option)"/>
我确实可以使用这个键并获得正确的值,但只能在非特殊元素中使用;当在for-each或其他类似下面的结构中使用该键时,会出现“XPath 2.0表达式中的错误:不是节点项”的错误。
我想要实现的是:在处理其他节点时,有一串选项字符串,我希望检索每个字符的格式。 例如:
<Tag>
<TagNr>92</TagNr>
<Options>AB</Options>
</Tag>
我尝试了很多下面的变体,但没有成功:
<xsl:variable name="TN"><xsl:value-of select="TagNr"/></xsl:variable>
<xsl:variable name="optList">
<xsl:analyze-string select="./Options" regex="[A-Z]">
<xsl:matching-substring>
<xsl:variable name="TNO" select="concat($TN, .)"/>
<opt>
<tag><xsl:value-of select="$TNO"/></tag>
<fmt><xsl:value-of select="key('xx', $TNO)"/></fmt>
</opt>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
使用正则表达式将文本拆分成单个字符时,获取(仅)opt/tag值也很好。 但是当我添加opt/fmt时,对于Xpath表达式 select="key('xx', $TNO)" 我遇到了上述错误信息。
我尝试按照该网站的另一个帖子建议,基于key函数定义变量,但没有成功。
有人能帮帮我吗?