我确定我在这里错过了一些简单的事情......
我无法使用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
我需要选择以下数据:
/收集
/记录
/数据字段
- &GT; / @标记=&#39; 245&#39;
----&GT; /子场/ @代码=&#39;一个&#39;
我希望输出为: &#34;无论如何教育学?&#34;
我的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库来运行它,如果这很重要的话。 代码编译并运行没有错误。 我的输出为空。
有什么想法吗? 提前谢谢。
答案 0 :(得分:0)
您可能希望使用@code=a
更改@code='a'
,例如:
<xsl:template match="/">
<xsl:value-of select="collection/record/datafield[@tag=245]/subfield[@code='a']"/>
</xsl:template>
修改强>
如果您坚持使用for-each
循环,请参阅以下内容:
<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 :(得分:0)
这就是我需要的
<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个复杂记录的片段。不是这一个例子。