1

我有一个应该将 Notes DB 显示为 XML 的代理。我成功检索了除 RichText 之外的所有字段。这是一个代码片段:

Set session = New NotesSession
Set doc = session.DocumentContext
Set db = Session.CurrentDatabase
Set view = db.getview("myView")
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
    Print "<job>"
    Print "<id>" & doc.id(0) & "</id>" ' Works fine since ID is a normal field
    Print "<text>" & doc.text(0) & "</text>" ' Does not work at all 
    Print "</job>"
    Set doc = view.GetNextDocument(doc)
Wend

如果我使用 doc.text 而不是 doc.text(0) 它只写整个文本的前两个单词。我想我必须遍历整个文本,但由于我是 Lotus Script 的新手,所以我不知道该怎么做。谢谢你们。

编辑:原来西蒙的回答是正确的。据我所知,如果我删除以下打印,则问题与编码有关:

Print |Content-Type:text/xml| & Chr$(13)

一切正常。我想我需要在标题中定义编码......

编辑:我现在使用这个 Print 代替:

Print "<text><![CDATA[" & rtitem.getUnformattedText() & "]]></text>"

但是,当我从浏览器调用代理时,它仍然在打印时中断,因为它忽略了 CDATA。

4

1 回答 1

1

不要使用点符号。要获取 Richtext 字段,您需要使用 getFirstItem() 方法调用并将其链接到 NotesRichTextItem 对象。之后,您应该能够使用 getUnformattedText() 方法将其转换为文本。

Dim rtitem As NotesRichTextItem
...
rtitem = doc.getFirstItem("text")

Print "<text>" & rtitem.getUnformattedText() & "</text>" 

当然,您可能需要解析该文本以防止 XML 中出现非标准字符,或者将其包装在 CDATA 块中。

于 2013-02-25T13:42:28.387 回答