4

我目前正在使用来自 NuGet 的 C# Interop Domino 程序集导出一个 lotus notes 数据库,

我还没有找到一种方法来按照输入的顺序来识别 NotesRichTextItem 中的对象或元素,例如,我可能先输入一个段落,然后是一个表格,然后是一个附件。有没有办法按照他们的尊重顺序循环遍历元素?

我找到了一种使用 FindFirstElement 查找元素的方法,但是您必须传递要查找的元素类型,这非常困难,因为无序提取所有元素会使内容失去其上下文。

谢谢

4

2 回答 2

3

有一种方法可以使用DXL(一种用于 Notes 的特殊 XML 格式)来分析 Notes 文档的 RichText 项。用于DxlExporter将 Notes 文档导出为 DXL 格式。您可以“走”然后通过 XML 并以正确的顺序获取带有元素的 RichText 项目的内容。

对于这个 RichText 项目,例如

在此处输入图像描述

你会得到这个 DXL

<item name='Body'>
    <richtext>
        <pardef id='1'/>
        <par def='1'>aaaaaaa</par>
        <table widthtype='fixedleft' refwidth='1.0667in'>
            <tablecolumn width='0.6729in'/>
            <tablecolumn width='0.3938in'/>
            <tablerow>
                <tablecell>
                    <pardef id='3' keepwithnext='true' keeptogether='true'/>
                    <par def='3'>111</par></tablecell>
                <tablecell>
                    <pardef id='4' keepwithnext='true' keeptogether='true'/>
                    <par def='4'>222</par></tablecell>
            </tablerow>
            <tablerow>
                <tablecell><par def='3'>333</par></tablecell>
                <tablecell><par def='4'>444</par></tablecell>
            </tablerow>
        </table>
        <pardef id='5' leftmargin='1.2500in' list='bullet'/>
        <par def='5'>xxx</par>
        <par def='5'>yyy</par>
        <par def='5'>zzz</par>
        <pardef id='6' leftmargin='1in'/>
        <par def='6'>
            <attachmentref name='icon16.gif' displayname='icon16.gif'>
                <picture height='34px' width='61px'>
                    <notesbitmap>lQAmAAAAAAAAAAAAA...</notesbitmap>
                    <caption>icon16.gif</caption>
                </picture>
            </attachmentref>
        </par>
    </richtext>
</item>

这是一个将选定文档导出到文件的 Java 代理。

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    @Override
    public void NotesMain() {

        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            DocumentCollection dc = agentContext.getUnprocessedDocuments();
            String filename = "c:/temp/exportDocs.dxl";
            Stream stream = session.createStream();
            if (stream.open(filename)) {
                stream.truncate();
                DxlExporter exporter = session.createDxlExporter();
                exporter.setRichTextOption(0);
                exporter.setMIMEOption(0);
                stream.writeText(exporter.exportDxl(dc));
            } else {
                System.out.println("Cannot open " + filename);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
于 2013-07-11T22:03:57.100 回答
2

不幸的是,API 让您无法做到这一点:

导航位于相同类型的元素内。您可以查找或获取类型的第一个元素、类型的下一个元素和类型的第 n 个元素。无论类型如何,您都无法找到或获取元素。

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_NOTESRICHTEXTNAVIGATOR_CLASS.html

更新:我忘了提到您可能想查看 Genii Software 提供的名为 MidasLSX 的第三方工具,它可能会对您有所帮助。 http://www.geniisoft.com/showcase.nsf/MidasLSX

于 2013-07-11T17:49:01.377 回答