我一直试图获取XSLT行的递归列表 - 每个项目都有一个数字ID和一个可选的Parent Item ID,用于标识它可能包含的项目。
这是我的输入XML(格式化感谢SharePoint):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="parentchild.xslt"?>
<Rows>
<Row>
<ID>1</ID>
<Title>Top Item 1</Title>
<Parent></Parent>
</Row>
<Row>
<ID>2</ID>
<Title>Top Item 2</Title>
<Parent></Parent>
</Row>
<Row>
<ID>3</ID>
<Title>Child 1 for top item 1</Title>
<Parent>1</Parent>
</Row>
<Row>
<ID>4</ID>
<Title>Child 2 for top item 1</Title>
<Parent>1</Parent>
</Row>
<Row>
<ID>5</ID>
<Title>Grandchild 1 for top item 1</Title>
<Parent>3</Parent>
</Row>
</Rows>
这是我预期结果的模型:
这是我的实际结果:每个顶级项目都成为其他顶级项目的子项。 真正的孩子(他们是军团)无处可寻。
我最好的猜测是我使用当前错误,或者错误地运行......我无论如何都不是 XSLT大师。
答案 0 :(得分:1)
好吧,每次处理一行时,都会生成一个<li><ul>XXX</ul></li>
结构,并且递归调用会填充XXX,所以显然每一行都会生成另一个(或两个)嵌套级别。我无法告诉你如何解决这个问题,因为我不了解你的照片。
答案 1 :(得分:0)
@
个标志。//Rows
修复了儿童用品。我仍然不知道这将如何重新进入SharePoint。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:h="http://www.w3.org/1999/xhtml">
<xsl:template match='/'>
<ul>
<xsl:apply-templates select='Rows/Row[Parent=""]' />
</ul>
</xsl:template>
<xsl:template match='Row'>
<li>
<xsl:value-of select="Title" />
<br/>Child items:
<ul>
<xsl:apply-templates select="//Rows/Row[Parent=current()/ID]" />
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
结果: