Xml 缩进XSL-FO中的子节点
我有这样的XML结构Xml 缩进XSL-FO中的子节点,xml,xslt,xsd,xsl-fo,Xml,Xslt,Xsd,Xsl Fo,我有这样的XML结构 <TestLog> <TestLogItem id="0" pid="-1"> <Message>some message</Message> </TestLogItem> <TestLogItem id="1" pid="0"> <Message>some message</Message> </TestLogItem>
<TestLog>
<TestLogItem id="0" pid="-1">
<Message>some message</Message>
</TestLogItem>
<TestLogItem id="1" pid="0">
<Message>some message</Message>
</TestLogItem>
<TestLogItem id="2" pid="0">
<Message>some message</Message>
</TestLogItem>
<TestLogItem id="3" pid="2">
<Message>some message</Message>
</TestLogItem>
</TestLog>
一些信息
一些信息
一些信息
一些信息
每个TestLogItem节点都有“id”和“pid(parentId)”。我在表行中显示消息,只想缩进每个消息,如果它是前一个节点的子节点,即它的PID等于前一个节点ID。我不知道如何在xsl fo中将其转换为pdf
任何TestLogItem节点都可以有任意数量的TestLogItem子节点
节点
处理第一项,然后执行递归调用以查找第一项的子项:
<xsl:template match="Testlogitem">
<fo:table-row...>
</fo:table-row>
<fo:table-row>
<fo:table-cell padding-left="1 cm">
<xsl:apply-templates select="following-sibling::*[@pid=./@id]"/>
</fo:table-cell>
<fo:table-row>
</xsl:template>
(您可能必须使用变量,而不是引用。/@id,现在无法测试)
编辑:
我已经添加了缩进代码。基本上,您可以为级别1创建一个表行。在该行中,添加一个具有缩进的level 2行
这是一个肮脏的把戏:嵌套表可能会导致麻烦。另一种方法是使用两步流程:
这在不构建嵌套表的情况下工作 使用
current
函数,即以下同级::*[@pid=current()/@id]
我完成了这部分。但我不知道如何缩进孩子。我的意思是一个标签用于一级儿童,两个标签用于二级儿童,依此类推。你能修改一下你的答案并解释一下缩进吗?