XSL unescape预处理

时间:2016-08-22 13:08:36

标签: xml xslt

我有一个部分编码的输入XML文档。这是一个示例:

<content>
  <body>
    &lt;div class="contentLayout"&gt;&lt;div&gt;&lt;div&gt;&lt;table&gt;
      [table's content]
    &lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
  </body>
</content>

在XSL样式表的帮助下,我只想显示表的内容,但不知道如何处理转义的代码。 我首先想到了unescape然后选择<table>节点,但我发现没有办法做到这一点。 使用<xsl:value-of select="." disable-output-escaping="yes" />似乎很好,但它不允许我仅选择<table>节点。

你有解决方案吗?

1 个答案:

答案 0 :(得分:0)

  

XSL转换由Confluence XSLT宏

完成

我担心我不熟悉这个工具。如果可以,我建议您分两次执行此操作:首先,在disable-output-escaping元素上使用body,然后将结果保存到新文件中。然后在第二遍中处理新文件。

替代方案很难看,很容易导致意想不到的结果:

<xsl:template match="/content">
    <table>
        <xsl:value-of select="substring-before(substring-after(body, '&lt;table&gt;'), '&lt;/table&gt;')" disable-output-escaping="yes"/>
    </table>
</xsl:template>