This commit is contained in:
Kyle Maxwell 2008-12-23 11:26:35 -08:00
parent 28ea686db3
commit 87ee8bcda7
3 changed files with 67 additions and 30 deletions

View File

@ -4,12 +4,16 @@
"nav": ["ul#nav li"],
"post(#posts li)": [{
"title": "h2",
"paras": ["p"],
"subcomments": [{
"paras": ["./p"],
"comments": [{
"title": "#comments h3",
"tags": ["#comments p"]
"paras": ["#comments p"]
}]
}]
}]
}
___ can you even build a key on this? (exslt node-set?!!?!?)
| | | | | | | | | | | |
for-each group-after(h1)[1] / (#posts li)[1] / group-after(#comments h3)[1] / #comments p

View File

@ -40,5 +40,6 @@
</li>
</ul>
</div>
<h1>another title -- empty page</h1>
</body>
</html>

View File

@ -11,9 +11,9 @@
"post(#posts li)": [{
"title": "h2",
"paras": ["p"],
"subcomments": [{
"comments": [{
"title": "#comments h3",
"tags": ["#comments p"]
"paras": ["#comments p"]
}]
}]
}]
@ -21,33 +21,65 @@
-->
<xsl:template match="/">
<dexter:root>
<page>
<dexter:groups>
<dexter:group>
<title></title>
<nav><dexter:groups><dexter:group></dexter:group></dexter:groups></nav>
<post>
<dexter:groups>
<dexter:group>
<title></title>
<paras><dexter:groups><dexter:group></dexter:group></dexter:groups></paras>
<subcomments>
<dexter:groups>
<dexter:group>
<title></title>
<tags><dexter:groups><dexter:group></dexter:group></dexter:groups></tags>
</dexter:group>
</dexter:groups>
</subcomments>
</dexter:group>
</dexter:groups>
</post>
</dexter:group>
</dexter:groups>
</page>
<dexter:root xmlns:dexter="http://kylemaxwell.com/dexter">
<page>
<dexter:groups>
<xsl:for-each select="//h1">
<xsl:variable name="index1" select="last() - position()" />
<dexter:group>
<title><xsl:value-of select="." /></title>
<nav>
<dexter:groups>
<xsl:for-each select="set:intersection(key('key1', $index1), //ul[@id='nav']//li)">
<dexter:group>
<xsl:value-of select="." />
</dexter:group>
</xsl:for-each>
</dexter:groups>
</nav>
<post>
<dexter:groups>
<xsl:for-each select="set:intersection(key('key1', $index1), //*[@id='posts']//li)">
<xsl:variable name="post" value="position()" />
<dexter:group>
<title><xsl:value-of select=".//h2" /></title>
<paras>
<dexter:groups>
<xsl:for-each select="./p">
<dexter:group><xsl:value-of select="."/></dexter:group>
</xsl:for-each>
</dexter:groups>
</paras>
<comments>
<dexter:groups>
<xsl:for-each select=".//*[@id='comments']//h3">
<xsl:variable name="index2" select="$index1 + (last() - position())" />
<dexter:group>
<title><xsl:value-of select="."/></title>
<paras>
<dexter:groups>
<xsl:for-each select="set:intersection(key('key2', $index2), //p)">
<dexter:group><xsl:value-of select="."/></dexter:group>
</xsl:for-each>
</dexter:groups>
</paras>
</dexter:group>
</xsl:for-each>
</dexter:groups>
</comments>
</dexter:group>
</xsl:for-each>
</dexter:groups>
</post>
</dexter:group>
</xsl:for-each>
</dexter:groups>
</page>
</dexter:root>
</xsl:template>
<xsl:key name="key1" match="//*" use="count(following::h1)" />
<xsl:key name="key2" match="//*" use="count(following::*[@id='comments']//h3)" />
</xsl:stylesheet>