【发布时间】:2016-07-14 07:18:51
【问题描述】:
我有一个 xml 文件来使用 xsl-fo 模板语言过滤数据。我的 XML:
<root>
<name>shyam</name>
<friend>
<name>Abc</name>
<phNo>90909090909</phNo>
<age>32</age>
<closefriends>
<names>test123</names>
</closefriends>
</friend>
<friend>
<name>Xyz</name>
<phNo>32323232323</phNo>
<age>44</age>
<closefriends>
<names>test345</names>
</closefriends>
</friend>
</root>
我想获取名称和名称值并将其显示在 xsl-fo 模板中的某个表格单元格上。
我的 XSL-FO 模板:
<?xml version="1.0" encoding="iso-8859-1"?>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<fo:block>Hello,
<xsl:value-of select="name" />!</fo:block>
<fo:block>
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
<fo:block>
No.
</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
<fo:block>
Name
</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black" text-align="center" font-weight="bold">
<fo:block>
Phone Number
</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="./friend">
<xsl:for-each select="./closefriends">
<fo:table-row>
<fo:table-cell border="solid 1px black" text-align="center">
<fo:block>
<xsl:value-of select="position()" />
</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black" text-align="center">
<fo:block>
<xsl:value-of select="name" />
<xsl:value-of select="names" />
</fo:block>
</fo:table-cell>
<fo:table-cell border="solid 1px black" text-align="center">
<fo:block>
<xsl:value-of select="phNo" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
我无法获取姓名值,只能获取密友-->姓名。需要获取名称以及同一张表 td 上的名称。
感谢任何帮助..谢谢
【问题讨论】:
-
您可以删除
./而不是select="./friend",直接使用select="friend"。./closefriends也是如此。长解释是两者都是相对于上下文节点进行评估的,但./friend是self::node()/child::friend的简写,friend是child::friend的简写。额外的self::node()不会在此处添加任何内容。