XSLT 导出过滤器产生不必要的空 XML 标记

Posted

技术标签:

【中文标题】XSLT 导出过滤器产生不必要的空 XML 标记【英文标题】:XSLT Export Filter produces unnecessary empty XML tags 【发布时间】:2016-09-22 12:47:20 【问题描述】:

我正在使用 XSLT 导出过滤器将 OpenOffice Calc 电子表格的一部分导出到 XML 文件中。

过滤器的一部分使用 xls:for-each 迭代,因为每次运行脚本时可能有不同数量的条目。但该迭代会在包含内容的标记之后生成空 XML 标记。

计算表如下所示:http://imgur.com/a/ALPX2(A 行和 B 行可以包含灵活数量的数据)

XSLT 导出过滤器当前如下所示:http://pastebin.com/ugW9CuSw

结果如下所示:http://pastebin.com/HiYXFrAY

我的想法是我可以添加某种 xsl:if,但我无法将它与 select="table:table-row[n]/table:table-cell[m]" 上的概念结合起来。

那么也许有人知道是什么导致了空的 XML 标记或如何摆脱它们?

【问题讨论】:

【参考方案1】:

我认为您需要从 XPath 教程开始学习如何编写谓词,例如将 <xsl:for-each select="table:table-row[position() > 1]"> 更改为 <xsl:for-each select="table:table-row[position() > 1][table:table-cell]"> 将仅处理具有 table-cell 子元素或 <xsl:for-each select="table:table-row[position() > 1][table:table-cell[normalize-space()]]">table-row 元素处理具有非空table-cell 子元素的table-row 元素。

我无法从电子表格应用程序的屏幕截图中看出哪种情况适合您输入的 XML 数据,但您可以自己查看 XML 并希望调整代码。

【讨论】:

您好,谢谢您的回答。遗憾的是,您的第一个示例没有更改输出,第二个示例在导出时抛出了错误,但我会研究 XPath 谓词。 Nvm,您的第二个示例中只缺少一个右括号 ]。添加它时,它解决了问题!谢谢! [编辑:现在添加了缺少括号,因此此答案中的第二个示例完全解决了问题]

以上是关于XSLT 导出过滤器产生不必要的空 XML 标记的主要内容,如果未能解决你的问题,请参考以下文章

使用 xslt 过滤器从 Calc 导出时出现 OpenOffice 错误

使用 XSLT 删除 XML 消息中的空元素字段和默认值

如果标签不存在,XSLT 处理 CSV 的空单元格

使用 Xslt 将 Xml 中类似节点的数据导出到 excel

XSLT 将 FMPXMLRESULT xml 文档导出到 Excel

Django(自定义过滤器和自定义标签)