Lotus notes lotusnotes和C#:NotesRichTextItem如何按照各自的顺序重新创建内容或循环元素

Lotus notes lotusnotes和C#:NotesRichTextItem如何按照各自的顺序重新创建内容或循环元素,lotus-notes,Lotus Notes,我目前正在使用NuGet的C#Interop Domino程序集导出lotus notes数据库 我还没有找到按照输入顺序识别NotesRichTextItem中的对象或元素的方法,例如,我可能先输入段落,然后输入表格,然后输入附件。 有没有办法按元素的顺序循环 我找到了一种使用FindFirstElement查找元素的方法,但是您必须传递您要查找的元素类型,这非常困难,因为不按顺序提取所有元素会使内容失去上下文 谢谢不幸的是,API无法做到这一点: 导航位于相同类型的元素中。你可以找到或得到

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

我还没有找到按照输入顺序识别NotesRichTextItem中的对象或元素的方法,例如,我可能先输入段落,然后输入表格,然后输入附件。 有没有办法按元素的顺序循环

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


谢谢

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

导航位于相同类型的元素中。你可以找到或得到 类型的第一个元素、类型的下一个元素和第n个元素 类型的元素您无法找到或获取元素,无论 类型。


更新:我忘了提到你可能想看看Genii软件中的第三方工具MidasLSX,它可能会帮助你

有一种方法可以使用DXL分析Notes文档的RichText项,DXL是Notes的一种特殊XML格式。使用
DxlExporter
将Notes文档导出为DXL格式。然后,您可以“遍历”XML,以正确的顺序获得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>

使用C-API是可能的,但这并非易事。如果你想走那条路线,我建议“Lotus Script的简单的Lotus Notes C++接口指南”(从第100页开始)。Ken提到的更简单的方法是MidasLSX。您也可以导出到MS-RTF文件格式。@Rahul,是的,您应该能够做到这一点。看看这个代码示例,了解如何从c#访问Domino对象:实际上,我在导出DXL时遇到了完全不同的错误。由于RTF文件,我的DXL大小为300 MB。正因为如此,我得到了系统的内存异常。你能帮我一下吗?也许增加jvm堆大小会有帮助,或者只是测试文档的RichText大小,并从DocumentCollection中排除那些超大文档。
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();
        }
    }
}