我有这个XML(很简略)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="uncle.xsl"?>
<report>
<title>Bibliography</title>
<dateCreated>2016-07-21T10:33:22</dateCreated>
<dateFormat>yyyy/mm/dd</dateFormat>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="00">Title 1</marcEntry>
</marc>
<call>
<callNumber>Call_1_VALLA</callNumber>
<item>
<itemID>item_1_VALLA</itemID>
</item>
</call>
<call>
<callNumber>Call_2_VALLA</callNumber>
<item>
<itemID>item_2_VALLA</itemID>
</item>
<item>
<itemID>item_2_2_VALLA</itemID>
</item>
</call>
<call>
<callNumber>Call_3_CNB</callNumber>
<item>
<itemID>item_3_CNB</itemID>
</item>
</call>
</catalog>
<catalog>
<marc>
<marcEntry tag="245" label="Title" ind="04">Title 2</marcEntry>
</marc>
<call>
<callNumber>Call_4_VALLA</callNumber>
<item>
<itemID>item_4-VALLA</itemID>
</item>
</call>
<call>
<callNumber>Call_5_CNB</callNumber>
<item>
<itemID>item_5_CNB</itemID>
</item>
<item>
<itemID>item_5_2_CNB</itemID>
</item>
</call>
</catalog>
</report>
我想将每个itemID与最近的前一个&#34; uncle&#34; (callNumber)所以我得到一个这样的列表: 标题1 Call_1_VALLA item_1_VALLA
标题1 Call_2_VALLA item_2_VALLA
标题1 Call_2_VALLA item_2_2_VALLA
标题1 Call_3_CNB item_3_CNB
标题2 Call_4_VALLA item_4-VALLA
标题2 Call_5_CNB item_5_CNB
标题2 Call_5_CNB item_5_2_CNB
我创建了一个样式表 - 但是,它选择了第一个叔叔而不是最近的前一个。
标题1 Call_1_VALLA item_1_VALLA
标题1 Call_1_VALLA item_2_VALLA
标题1 Call_1_VALLA item_2_2_VALLA
标题1 Call_1_VALLA item_3_CNB
标题2 Call_4_VALLA item_4-VALLA
标题2 Call_4_VALLA item_5_CNB
标题2 Call_4_VALLA item_5_2_CNB
这些是我样式表的相关部分 - 需要改进的地方?
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<catalog>
<xsl:for-each select="report/catalog/call/item">
<itemline>
<Title><xsl:value-of select="../../marc/marcEntry[@tag='245']"/></Title>
<callNumber><xsl:value-of select="../../call/callNumber"/></callNumber>
<itemID><xsl:value-of select="itemID"/></itemID>
</itemline>
</xsl:for-each>
</catalog>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您需要将callNumber
的输出更改为此...
<callNumber><xsl:value-of select="../callNumber"/></callNumber>
或许这个
<callNumber><xsl:value-of select="preceding-sibling::callNumber"/></callNumber>