XSLT:将字符串解析为XML节点集(concret:将HTML-String转换为节点集)?

时间:2012-01-03 09:46:17

标签: xml string parsing xslt

我面临的问题是,我在XML中有一个带有字符串的节点,代表HTML。 我需要剪切这个字符串,但是,当然,这可能会产生一个无效的HTML标记(例如,如果我总是在30个字符后剪切字符串,我很容易丢失像</ul>等关闭元素)。 该怎么办? 这似乎非常困难,因为我没有通过谷歌找到真正的帮助。

到目前为止我的想法:使用“analyze-string”和正则表达式选择节点和内容,并将它们写成es-elements-nodes-nodes。 但是我遇到了很大的问题需要处理所有情况,尤其是嵌套节点。

有人有想法吗?

仅供参考:我的记事本:

  1. 正则表达式:抓住第一个标签
  2. 读取第一个节点的标记名
  3. 将标记名放在正则表达式中并搜索整个标记,同时选择字符串的其余部分(稍后再继续)
  4. 检查内容:更多标签?是的: - &gt;步骤1,否: - &gt;第5步
  5. 将标记写为node-element
  6. 取其余的字符串 - &gt;第1步

  7. 以下是XML-doc:

    <?xml version="1.0" encoding="UTF-8"?>
    <html>
        <data>
            <![CDATA[
            <h2>header</h2><p>A little article. <b>Here</b> it's already done!</p>
            ]]>
        </data>
    </html>
    

    我想做什么:

    我有一个字符串(html),只想输出特殊数量的字符(例如前25个字符)。当我在字符串上执行此操作时,我得到了这个结果:

    "<h2>header</h2><p>A little article"
    

    在下一步中,我将此字符串放在HTML输出中,但此时我得到了无效标记,因为<p> - 标记未关闭。

    所以我的第一个方法是:解析此字符串以获取每个标记的XML节点,然后遍历每个节点,编写一个xml元素(以确保最终标记有效)并复制多个字符直到达到限制,在这个例子中将是25个字符。

2 个答案:

答案 0 :(得分:0)

如果你有一个表示HTML的XML节点,那么这应该是实体编码的,即打开和关闭括号转换为&lt;&gt; - 这意味着你可以在任何你喜欢的地方切割它仍然有一个有效的XML文档。

答案 1 :(得分:0)

正如您提到的analyze-string,您似乎使用XSLT 2.0。这样你有两个选择,Saxon 9有一个扩展函数http://www.saxonica.com/documentation/extensions/functions/parse.xml(如果你想解析HTML,甚至还有一个http://www.saxonica.com/documentation/extensions/functions/parse-html.xml),然后有David Carlisle的纯XSLT 2.0实现您可以在样式表中导入HTML解析器http://code.google.com/p/web-xslt/source/browse/trunk/htmlparse,然后使用数据元素的内容。