使用key()函数的列表中的上一项
我试图简化如何访问列表中的前一个条目的问题()。假设我有一个这样的列表:使用key()函数的列表中的上一项,key,xslt-3.0,Key,Xslt 3.0,我试图简化如何访问列表中的前一个条目的问题()。假设我有一个这样的列表: <?xml version="1.0" encoding="UTF-8"?> <root> <row> <letter>A</letter> <number>1</number> </row> <row> <letter>B</
<?xml version="1.0" encoding="UTF-8"?>
<root>
<row>
<letter>A</letter>
<number>1</number>
</row>
<row>
<letter>B</letter>
<number>2</number>
</row>
<row>
<letter>C</letter>
<number>3</number>
</row>
<row>
<letter>D</letter>
<number>4</number>
</row>
<row>
<letter>E</letter>
<number>5</number>
</row>
<row>
<letter>F</letter>
<number>6</number>
</row>
<row>
<letter>G</letter>
<number>7</number>
</row>
<row>
<letter>H</letter>
<number>8</number>
</row>
</root>
A.
1.
B
2.
C
3.
D
4.
E
5.
F
6.
G
7.
H
8.
还有一个简单的XML文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<base>
<object>A</object>
<object>B</object>
<object>H</object>
</base>
A.
B
H
我想把前面的条目写在每个对象旁边。因此,这将是期望的输出:
<?xml version="1.0" encoding="utf-8"?>
<group>
<object>A</object>
<preceding></preceding>
</group>
<group>
<object>B</object>
<preceding>A</preceding>
</group>
<group>
<object>H</object>
<preceding>G</preceding>
</group>
A.
B
A.
H
G
这是我到目前为止的XSL代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:mode on-no-match="shallow-copy" />
<xsl:output indent="yes"
method="xml"
encoding="utf-8"
omit-xml-declaration="false"/>
<xsl:param name="alphabet" select="document('alphabet.xml')"/>
<xsl:key name="letter-lookup" match="row" use="letter"/>
<xsl:template match="base">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="object">
<xsl:element name="group">
<xsl:element name="object">
<xsl:value-of select="text()"/>
</xsl:element>
<xsl:element name="preceding">
<xsl:value-of select="key('letter-lookup', text(), $alphabet)/parent::*/position()"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
当然position()不起作用。但是我怎样才能得到之前的结果呢?(列表中的字母表是为了简单起见。在实际列表中,没有隐含的ABC逻辑,因此必须使用类似于前面的兄弟姐妹的东西)如果您知道前面的兄弟姐妹,那么我不确定您为什么没有使用它:
key('letter-lookup',,,,$alphabet)/previous sibling::row[1]/字母
如果你知道前面的兄弟姐妹,那么我不知道你为什么没有使用它:键('letter-lookup',,,$alphabet)/前面的兄弟姐妹::行[1]/letter
有时一个人关心的是大局,一个人对细节失去了眼睛!这就是发生在中观世界上的事情。有时,一个人只关心大局,而忽略了细节!这就是发生在我身上的事