首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从嵌套元素中选择XSLT

从嵌套元素中选择XSLT
EN

Stack Overflow用户
提问于 2015-05-14 04:58:10
回答 2查看 788关注 0票数 2

我肯定我错过了一些简单的东西。

我无法使用XLST转换来选择嵌套的xml元素。

这是xml

代码语言:javascript
复制
<collection>
<record>
  <leader>01814nam a2200205Ia 4500</leader>
  <controlfield tag="003">PSCA</controlfield>
  <controlfield tag="005">20141201150951.0</controlfield>
  <controlfield tag="008">131110s9999    xx            000 0 und d</controlfield>
  <datafield tag="040" ind1=" " ind2=" ">
    <subfield code="a">PSCA</subfield>
    <subfield code="c">Calyx</subfield>
  </datafield>
  <datafield tag="110" ind1=" " ind2=" ">
    <subfield code="9">76</subfield>
    <subfield code="a">Children's Services Central</subfield>
  </datafield>
  <datafield tag="245" ind1="0" ind2="0">
    <subfield code="a">What's Pedagogy Anyway?</subfield>
    <subfield code="b">Using pedagogical  documentation to engage  with the Early Years Learning  Framework </subfield>
  </datafield>
</record>
</collection

我需要选择以下数据:

/collection

/record

/datafield

-/@tag=‘245’

->/子字段/@code=‘a’

我希望它的输出是:“什么是教育学?”

选择此节点/数据的XLST如下:

代码语言:javascript
复制
<xsl:for-each select="collection/record/datafield">
    <xsl:choose>
        <xsl:when test="@tag=245">
            <xsl:choose>
                <xsl:when test="/subfeild/@code=a">
                    <xsl:value-of select="/subfeild"/>
                </xsl:when> 
            </xsl:choose>
        </xsl:when>
    </xsl:choose>
 </xsl:for-each>

如果这很重要,我将使用Python中的lxml库来运行它。代码编译并运行,没有错误。我的输出为空。

有什么想法吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-14 05:57:00

您可能希望用@code=a更改@code='a',例如:

代码语言:javascript
复制
 <xsl:template match="/">
    <xsl:value-of select="collection/record/datafield[@tag=245]/subfield[@code='a']"/>
</xsl:template>

编辑

如果您坚持使用for-each循环,请参见下面的内容:

代码语言:javascript
复制
<xsl:template match="/">
    <xsl:for-each select="collection/record/datafield">
        <xsl:choose>
            <xsl:when test="@tag=245">
                <xsl:value-of select="subfield[@code='a']"/>
            </xsl:when>
        </xsl:choose>
    </xsl:for-each>
</xsl:template>
票数 1
EN

Stack Overflow用户

发布于 2015-05-14 07:15:26

这就是我所需要的

代码语言:javascript
复制
<xsl:value-of select="collection/record/datafield[@tag=245]/subfield[@code='a']" />
<xsl:for-each select="collection/record">
    <xsl:value-of select="datafield[@tag=245]/subfield[@code='a']"/>
</xsl:for-each>

我应该解释-我需要循环,因为所提供的XML是500多个复杂记录的片段。而不是这一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30229553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档