理解和创建 XML 个内链序列
Understading and creating XML inner chained sequences
我的任务是使用提供给我的 XSLT 起始代码重新创建内部链式序列。我感到困惑的是我不确定如何在 XSLT 文件中设置 XPath。
目前,我有一些 XPath 可以遍历所提供的项目,但它们没有正确排序。不确定我是否完全理解正确设置 XPaths。
我也得到了两个提示,
在标记4处:有很多方法可以创建这个xpath,得到分数的方法包括以not(//item[@
开头
在市场上 8:There 有很多创建此 xpath 的方法,获得积分的方法包括这两部分 1) not(//item 和 2) //items/@lastItemMarker
任何帮助和解释将不胜感激!
我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<!--marker #1-->
<xsl:template match="/">
<html>
<head>
<title>Sequence Level 2 Exercise</title>
</head>
<body>
<a name="top"/>
<table border="1" cellpadding="10">
<tr>
<td valign="top">
<h1>Sequences</h1>
<!--marker #2-->
<xsl:for-each select="//items">
<!--marker #3-->
<xsl:variable name="currItemId" select="."/>
<!--marker #4-->
<xsl:if test="//item[@id]">
<hr/>
<ol>
<xsl:call-template name="outputSeqLink">
<!--marker #5-->
<xsl:with-param name="currItemId" select="."/>
</xsl:call-template>
</ol>
</xsl:if>
</xsl:for-each>
</td>
<td valign="top">
<h1>Items</h1>
<xsl:for-each select="//item">
<hr/>
<a name="{@id}"/>
<h2>
<a href="#top">
<font size="-2">top</font>
</a>
<xsl:value-of select="@title"/>
</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
</xsl:for-each>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="outputSeqLink">
<xsl:param name="currItemId"/>
<li>
<!--marker #6-->
<a href="">
<!--marker #7-->
<xsl:value-of select="."/>
</a>
</li>
<!--marker #8-->
<xsl:if test="//items/@lastItemMarker">
<!--marker #9-->
<xsl:variable name="nextItemRefId" select="."/>
<xsl:call-template name="outputSeqLink">
<!--marker #10-->
<xsl:with-param name="currItemId" select="."/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2008 (http://www.altova.com)-->
<system xsi:noNamespaceSchemaLocation="seqLevel2Exercise.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<items lastItemMarker="last">
<item id="i1" title="Siamese Cats" nextItemRefId="i5"/>
<item id="i2" title="Siamese Dogs" nextItemRefId="i10"/>
<item id="i3" title="Siamese Twins" nextItemRefId="i9"/>
<item id="i4" title="Chicago Twins" nextItemRefId="i7"/>
<item id="i5" title="Fraternal Twins" nextItemRefId="i2"/>
<item id="i6" title="Fraternal Societies" nextItemRefId="last"/>
<item id="i7" title="Society of Mind" nextItemRefId="i6"/>
<item id="i8" title="Mind over Matter" nextItemRefId="i1"/>
<item id="i9" title="Matters of Fact" nextItemRefId="i4"/>
<item id="i10" title="Facts and Figures" nextItemRefId="last"/>
</items>
</system>
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 (http://www.altova.com) by XMLSpy 2008 Release 2, Partner License for 30 users (valid from 2008-09-05 to 2009-09-30) (University of Washington) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="system">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute ref="title" use="required"/>
<xs:attribute name="nextItemRefId" type="xs:IDREF" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="lastItemMarker" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attribute name="title"/>
</xs:schema>
预期输出:
<html>
<head>
<title>Sequence Level 2 Exercise</title>
</head>
<body>
<a name="top"/>
<table border="1" cellpadding="10">
<tr>
<td valign="top">
<h1>Sequences</h1>
<hr/>
<ol>
<li>
<a href="#i3">Siamese Twins</a>
</li>
<li>
<a href="#i9">Matters of Fact</a>
</li>
<li>
<a href="#i4">Chicago Twins</a>
</li>
<li>
<a href="#i7">Society of Mind</a>
</li>
<li>
<a href="#i6">Fraternal Societies</a>
</li>
</ol>
<hr/>
<ol>
<li>
<a href="#i8">Mind over Matter</a>
</li>
<li>
<a href="#i1">Siamese Cats</a>
</li>
<li>
<a href="#i5">Fraternal Twins</a>
</li>
<li>
<a href="#i2">Siamese Dogs</a>
</li>
<li>
<a href="#i10">Facts and Figures</a>
</li>
</ol>
</td>
<td valign="top">
<h1>Items</h1>
<hr/>
<a name="i1"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Cats</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i2"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Dogs</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i3"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i4"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Chicago Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i5"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Fraternal Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i6"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Fraternal Societies</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i7"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Society of Mind</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i8"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Mind over Matter</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i9"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Matters of Fact</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i10"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Facts and Figures</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
</td>
</tr>
</table>
</body>
</html>
recreate an inner chained sequence
我相信做到这一点的优雅(也有效)方法是从标记为序列中最后的项目开始,然后递归地向后工作,使用 key 到 select 序列中的前一项。
这是一个最小的例子:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="prev-item" match="item" use="@nextItemRefId" />
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="key('prev-item', 'last')">
<ol>
<xsl:apply-templates select="."/>
</ol>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<xsl:apply-templates select="key('prev-item', @id)"/>
<li>
<a href="#{@id}">
<xsl:value-of select="@title" />
</a>
</li>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,这将 return:
结果
<html>
<body>
<ol>
<li><a href="#i3">Siamese Twins</a></li>
<li><a href="#i9">Matters of Fact</a></li>
<li><a href="#i4">Chicago Twins</a></li>
<li><a href="#i7">Society of Mind</a></li>
<li><a href="#i6">Fraternal Societies</a></li>
</ol>
<ol>
<li><a href="#i8">Mind over Matter</a></li>
<li><a href="#i1">Siamese Cats</a></li>
<li><a href="#i5">Fraternal Twins</a></li>
<li><a href="#i2">Siamese Dogs</a></li>
<li><a href="#i10">Facts and Figures</a></li>
</ol>
</body>
</html>
我的任务是使用提供给我的 XSLT 起始代码重新创建内部链式序列。我感到困惑的是我不确定如何在 XSLT 文件中设置 XPath。
目前,我有一些 XPath 可以遍历所提供的项目,但它们没有正确排序。不确定我是否完全理解正确设置 XPaths。
我也得到了两个提示,
在标记4处:有很多方法可以创建这个xpath,得到分数的方法包括以not(//item[@
开头在市场上 8:There 有很多创建此 xpath 的方法,获得积分的方法包括这两部分 1) not(//item 和 2) //items/@lastItemMarker
任何帮助和解释将不胜感激!
我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<!--marker #1-->
<xsl:template match="/">
<html>
<head>
<title>Sequence Level 2 Exercise</title>
</head>
<body>
<a name="top"/>
<table border="1" cellpadding="10">
<tr>
<td valign="top">
<h1>Sequences</h1>
<!--marker #2-->
<xsl:for-each select="//items">
<!--marker #3-->
<xsl:variable name="currItemId" select="."/>
<!--marker #4-->
<xsl:if test="//item[@id]">
<hr/>
<ol>
<xsl:call-template name="outputSeqLink">
<!--marker #5-->
<xsl:with-param name="currItemId" select="."/>
</xsl:call-template>
</ol>
</xsl:if>
</xsl:for-each>
</td>
<td valign="top">
<h1>Items</h1>
<xsl:for-each select="//item">
<hr/>
<a name="{@id}"/>
<h2>
<a href="#top">
<font size="-2">top</font>
</a>
<xsl:value-of select="@title"/>
</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk
jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk
aslkfj lkajsdflkflj</p>
</xsl:for-each>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="outputSeqLink">
<xsl:param name="currItemId"/>
<li>
<!--marker #6-->
<a href="">
<!--marker #7-->
<xsl:value-of select="."/>
</a>
</li>
<!--marker #8-->
<xsl:if test="//items/@lastItemMarker">
<!--marker #9-->
<xsl:variable name="nextItemRefId" select="."/>
<xsl:call-template name="outputSeqLink">
<!--marker #10-->
<xsl:with-param name="currItemId" select="."/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2008 (http://www.altova.com)-->
<system xsi:noNamespaceSchemaLocation="seqLevel2Exercise.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<items lastItemMarker="last">
<item id="i1" title="Siamese Cats" nextItemRefId="i5"/>
<item id="i2" title="Siamese Dogs" nextItemRefId="i10"/>
<item id="i3" title="Siamese Twins" nextItemRefId="i9"/>
<item id="i4" title="Chicago Twins" nextItemRefId="i7"/>
<item id="i5" title="Fraternal Twins" nextItemRefId="i2"/>
<item id="i6" title="Fraternal Societies" nextItemRefId="last"/>
<item id="i7" title="Society of Mind" nextItemRefId="i6"/>
<item id="i8" title="Mind over Matter" nextItemRefId="i1"/>
<item id="i9" title="Matters of Fact" nextItemRefId="i4"/>
<item id="i10" title="Facts and Figures" nextItemRefId="last"/>
</items>
</system>
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 (http://www.altova.com) by XMLSpy 2008 Release 2, Partner License for 30 users (valid from 2008-09-05 to 2009-09-30) (University of Washington) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="system">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="items">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute ref="title" use="required"/>
<xs:attribute name="nextItemRefId" type="xs:IDREF" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="lastItemMarker" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:attribute name="title"/>
</xs:schema>
预期输出:
<html>
<head>
<title>Sequence Level 2 Exercise</title>
</head>
<body>
<a name="top"/>
<table border="1" cellpadding="10">
<tr>
<td valign="top">
<h1>Sequences</h1>
<hr/>
<ol>
<li>
<a href="#i3">Siamese Twins</a>
</li>
<li>
<a href="#i9">Matters of Fact</a>
</li>
<li>
<a href="#i4">Chicago Twins</a>
</li>
<li>
<a href="#i7">Society of Mind</a>
</li>
<li>
<a href="#i6">Fraternal Societies</a>
</li>
</ol>
<hr/>
<ol>
<li>
<a href="#i8">Mind over Matter</a>
</li>
<li>
<a href="#i1">Siamese Cats</a>
</li>
<li>
<a href="#i5">Fraternal Twins</a>
</li>
<li>
<a href="#i2">Siamese Dogs</a>
</li>
<li>
<a href="#i10">Facts and Figures</a>
</li>
</ol>
</td>
<td valign="top">
<h1>Items</h1>
<hr/>
<a name="i1"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Cats</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i2"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Dogs</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i3"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Siamese Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i4"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Chicago Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i5"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Fraternal Twins</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i6"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Fraternal Societies</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i7"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Society of Mind</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i8"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Mind over Matter</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i9"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Matters of Fact</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<hr/>
<a name="i10"/>
<h2><a href="#top">
<font size="-2">top</font>
</a>Facts and Figures</h2>
<h3>Faked in content</h3>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
<p>alkdjfasajflkdsajfsdlkf lkjh alksdjflkajflk lkjdsaflk jsflkjsadlkf jdsajlkdsafj lksajflkdsajflkdsajflkjlksadlkj lk aslkfj lkajsdflkflj</p>
</td>
</tr>
</table>
</body>
</html>
recreate an inner chained sequence
我相信做到这一点的优雅(也有效)方法是从标记为序列中最后的项目开始,然后递归地向后工作,使用 key 到 select 序列中的前一项。
这是一个最小的例子:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="prev-item" match="item" use="@nextItemRefId" />
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="key('prev-item', 'last')">
<ol>
<xsl:apply-templates select="."/>
</ol>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<xsl:apply-templates select="key('prev-item', @id)"/>
<li>
<a href="#{@id}">
<xsl:value-of select="@title" />
</a>
</li>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,这将 return:
结果
<html>
<body>
<ol>
<li><a href="#i3">Siamese Twins</a></li>
<li><a href="#i9">Matters of Fact</a></li>
<li><a href="#i4">Chicago Twins</a></li>
<li><a href="#i7">Society of Mind</a></li>
<li><a href="#i6">Fraternal Societies</a></li>
</ol>
<ol>
<li><a href="#i8">Mind over Matter</a></li>
<li><a href="#i1">Siamese Cats</a></li>
<li><a href="#i5">Fraternal Twins</a></li>
<li><a href="#i2">Siamese Dogs</a></li>
<li><a href="#i10">Facts and Figures</a></li>
</ol>
</body>
</html>