【问题标题】:How to extract the content of two equal XML-fields with XSLT?如何使用 XSLT 提取两个相等的 XML 字段的内容?
【发布时间】:2017-05-29 11:32:44
【问题描述】:

我在 XML 中有以下字段:

<datafield tag="004R"><subfield code="0">10900/69470</subfield></datafield>

<datafield tag="004R"><subfield code="0">10419/140630</subfield></datafield>

所以标签是相同的“004R”,也是子文件代码“0”,但值不同。

我尝试用我的 XSLT 提取这两个字段,但我只得到第一个重复两次。那是我的 XSLT: 首先我定义变量

<xsl:variable name="handle004R" 
                        select="recordData/record/datafield[@tag='004R']/subfield[@code='0']" />

然后尝试提取所有值:

 <xsl:choose>
                        <xsl:when test="string($handle004R)">
                            <xsl:for-each select="$handle004R">
                                <identifier xmlns="http://purl.org/dc/elements/1.1/">
                                    <xsl:value-of select="$handle004R" />
                                </identifier>
                            </xsl:for-each>
                        </xsl:when>
                        <xsl:otherwise />
                    </xsl:choose>

输出是:

<identifier xmlns="http://purl.org/dc/elements/1.1/">10900/69470</identifier>
<identifier xmlns="http://purl.org/dc/elements/1.1/">10900/69470</identifier>

但应该是:

<identifier xmlns="http://purl.org/dc/elements/1.1/">10900/69470</identifier>
<identifier xmlns="http://purl.org/dc/elements/1.1/">10419/140630</identifier>

【问题讨论】:

    标签: arrays xml xslt


    【解决方案1】:

    &lt;xsl:value-of select="$handle004R" /&gt; 更改为&lt;xsl:value-of select="."/&gt;

    【讨论】:

    • 此更改导致错误消息:无法编译样式表。检查表达式“com.sun.org.apache.xalan.internal.xsltc.compiler.ForEach@22e0f643”的类型时出错。'
    • 哪个工具给出了这个错误,到底是哪一行?您发布的代码有效吗?您能否发布一个最小但完整且没有出错的 XSLT 和 XML 示例?
    • compiler.ForEach 表明错误早于xsl:for-each
    • 您的解决方案正在运行。非常感谢。那是我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多