我收到此错误:
XML解析器报告的错误:元素类型" fo:table-row"必须终止 通过匹配的结束标记"
library(tidyverse) valenz <- data.frame( mean = c(6, 0, 2, 4, 3, 5, 4, 5), group = c("group a","group a", "group b","group b", "group c","group c","group d","group d"), condition = c("condition1", "condition2","condition1", "condition2","condition1", "condition2","condition1", "condition2") ) ggplot (valenz, aes(x=group, y=mean, fill=factor(condition), alpha=group)) + geom_bar(stat="identity",position="dodge")
&#34;。
尝试动态创建</fo:table-row>
时。
这是我目前的XSLT代码:
fo:table-row
这就是我使用的XML(尽管我认为这是我的语法而不是实际的XML问题):
<xsl:template match="sec|ack">
<xsl:call-template name="subtitle">
<xsl:with-param name="text" select="title"/>
</xsl:call-template>
<fo:table width="100%">
<fo:table-column column-width="45%"/>
<fo:table-column column-width="45%"/>
<fo:table-body>
<xsl:for-each select="sec/*">
<xsl:variable name="i" select="position()" />
<xsl:if test="($i == 1)">
<fo:table-row>
</xsl:if>
<xsl:if test="($i mod 2) && $i > 1">
</fo:table-row>
<fo:table-row>
</xsl:if>
<fo:table-cell>
<fo:block><xsl:value-of select="*" /></fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</fo:table-body>
</fo:table>
</xsl:template>
我将历史代码从1列显示转换为2列显示。如果有更好的非表格方法,我也会对此感兴趣。我尝试使用<sec>
<title>Section Title</title>
<sec>
<title>Paragraph 1 Title</title>
<p>Body paragraph</p>
</sec>
<sec>
<title>Paragraph 2 Title</title>
<list list-type="order">
<list-item>
<p>Step 1.</p>
</list-item>
<list-item>
<p>Step 2.</p>
</list-item>
<list-item>
<p>Step 3.</p>
</list-item>
<list-item>
<p>Step 4.</p>
</list-item>
<list-item>
<p>Step 5.</p>
</list-item>
<list-item>
<p>Step 6.</p>
</list-item>
<list-item>
<p>Step 7.</p>
</list-item>
<list-item>
<p>Step 8.</p>
</list-item>
<list-item>
<p>Step 9.</p>
</list-item>
<list-item>
<p>Step 10.</p>
</list-item>
<list-item>
<p>Step 11.</p>
</list-item>
<list-item>
<p>Step 12.</p>
</list-item>
<list-item>
<p>Step 13.</p>
</list-item>
<list-item>
<p>Step 14.</p>
</list-item>
</list>
</sec>
</sec>
但无法使其正常运行。通过这种方法,我可以使静态2列显示工作。
这是我的静态方法:
float
答案 0 :(得分:2)
当您指示使用XSLT 2时,您可以使用for-each-group group-adjacent="(position() - 1) idiv 2"
的位置分组将每两个选定的相邻节点分组为一个表行,而不是您使用的<xsl:for-each select="sec/*">
<xsl:for-each-group select="*" group-adjacent="(position() - 1) idiv 2">
<fo:table-row>
<xsl:apply-templates select="current-group()" mode="cell"/>
</fo:table-row>
</xsl:for-each-group>
然后编写一个模板,将任何元素转换为该命名模式的单元格:
<xsl:template match="*" mode="cell">
<fo:table-cell>
<fo:block>
<xsl:apply-templates/>
</fo:block>
</fo:table-cell>
</xsl:template>