Python XSLT从嵌套元素中选择
我肯定我错过了一些简单的东西 我无法使用XLST转换选择嵌套的xml元素 这是xmlPython 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
<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>