Python XSLT从嵌套元素中选择

Python XSLT从嵌套元素中选择,python,xml,xslt,Python,Xml,Xslt,我肯定我错过了一些简单的东西 我无法使用XLST转换选择嵌套的xml元素 这是xml <collection> <record> <leader>01814nam a2200205Ia 4500</leader> <controlfield tag="003">PSCA</controlfield> <controlfield tag="005">20141201150951.0</contro

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

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

这是xml

<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

01814nam a2200205Ia 4500
PSCA
20141201150951
131110s9999 xx 000 0和d
PSCA
花萼
76
儿童服务中心
教育学到底是什么?
使用教学文档参与早期学习框架
/@tag='245'

---->/子字段/@code='a'

我预计产出为: “到底什么是教育学?”

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

<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库来运行它。 代码编译并运行时没有错误。 我的输出为空

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

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

 <xsl:template match="/">
    <xsl:value-of select="collection/record/datafield[@tag=245]/subfield[@code='a']"/>
</xsl:template>
这就是我需要的

<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多条复杂记录的片段。不是这一个实例。

好的-可能太早了……我如何使用for each而不是直接选择来迭代所有“数据字段”?
<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>