我肯定我错过了一些简单的东西。
我无法使用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我需要选择以下数据:
/collection
/record
/datafield
-/@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库来运行它。代码编译并运行,没有错误。我的输出为空。
有什么想法吗?提前谢谢。
发布于 2015-05-14 05:57:00
您可能希望用@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>发布于 2015-05-14 07:15:26
这就是我所需要的
<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多个复杂记录的片段。而不是这一次。
https://stackoverflow.com/questions/30229553
复制相似问题