撒克逊人提取无关的行

时间:2016-02-19 03:33:55

标签: spring xslt saxon

我正在尝试报告Spring配置: 当然,XML有很多深度,重要的部分非常深入。 有趣的流程可以总结如下,省略了多个属性元素。

bean
-property
--list
---bean
----property name="phaseName"
----property name="pluginID
----property name="fileSpecifications"
-----set
-------bean
--------property name="dataStoreName" value="courses"
--------property name="columnNames"
---------list
----------value
----------value

在xsl中,我进入第二个bean级别并提取pluginID,然后找到“fileSpecifications”,我得到“dataStoreName”。 我无法理解,Saxon还提取了很多空行和额外标签的值列表。

额外的文本来自名为“columnNames”的属性,该属性未在任何地方的XSL文件中引用。 在通过添加xsl:message语句进行调试时,我无法确定哪个模板正在进行此提取。

如果在邮件列表中难以阅读,我创建了一个博客条目http://blog.artifact-software.com/tech/?p=296,描述了可以下载和执行的文件。 如果需要,我可以提供更多样本阶段文件。

xsl中有一个更高级别的处理,它读取主配置并查找导入的所有文件。 它将文件与阶段匹配,以便可以按照处理阶段的相同顺序报告阶段。 xsl构建列表,然后依次处理每个文件。

即使我删除了提取dataStoreName值属性的代码,我仍然会得到columnNames值列表。

这是一个知道错误还是我做了些傻事?

从输出中提取

<tr>
   <td class="header">Bean Name</td>
   <td class="header">Plugin Name</td>
   <td class="header">DataStore Name</td>
 </tr>

 <tr>
    <td class="id">CourseWriterOutputting a row</td>    
    <td class="pluginId">Plugin ID:CourseFileWriter<br>Usage Description</td>
    <td class="dataStoreName"></td>
    <td>
                 courses

                   TITLE
                   PMI_REPORTING_NUMBER
                   IIBA_REPORTING_NUMBER
                   DEFAULT_CURRENCY
                   PRICE
                   OFFERING_TEMPLATE_NO
                   ABSTRACT

xsl的提取物是          输出表格          / XSL:可变&GT;                              

<caption><xsl:value-of select="$phaseName" />
  from <xsl:value-of  select="$resourceName" /></caption>
<tr>
<td class="header">Bean Name</td><td class="header">Plugin Name</td>
<td class="header">DataStore Name</td>
</tr>
 <xsl:apply-templates select="document($fileName)/sb:beans/sb:bean" />
 <xsl:apply-templates
  select="document($fileName)/sb:beans/sb:bean/sb:property[@name='plugins']/sb:list" mode="plug-in"/>

</table>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

有人建议它可能是XSLT内置模板,我发现Why does XSLT output all text by default?给了我关于如何找到泄漏的提示。
这导致对单个输入文件版本的测试,这使我能够找到泄漏的来源 我需要收紧内部应用模板上的选择,以便它只显示我想要的<property>而不是所有属性。
我将使用修订后的源代码更新博客文章 我在原始参考文献中链接到源代码时没有遇到任何问题,但是从现在起大约10年后你的观点非常好 我不愿意发布数百行代码和更多输入行,但即使没有看到代码,你也确定了我悲伤的根源。