代码之家  ›  专栏  ›  技术社区  ›  Menelaos

Aspose数据集。readXml生成更复杂的结构

  •  0
  • Menelaos  · 技术社区  · 6 年前

    所以我检查了Java的示例,注意到使用 InTableList.doc InTableList 从…起 https://github.com/aspose-words/Aspose.Words-for-Java/tree/master/Examples/src

    Aspose代码

    代码的小部分摘录:

    // Create a new data set
            DataSet ds = new DataSet("ds");
    
            // Add a new table to store contracts
            DataTable dtContracts = new DataTable("Contracts");
    
            // Add a new table to store managers
            DataTable dtManagers = new DataTable("Managers");
    
            // Add a new table to store clients
            DataTable dtClients = new DataTable("Clients");
    
            // Add columns to Managers table
            dtManagers.getColumns().add("Id", int.class);
            dtManagers.getColumns().add("Name");
            dtManagers.getColumns().add("Age", int.class);
            dtManagers.getColumns().add("Photo", byte[].class);
            ds.getTables().add(dtManagers);
    
            // Add columns to Contracts table
            dtContracts.getColumns().add("Id", int.class);
            dtContracts.getColumns().add("ClientId", int.class);
            dtContracts.getColumns().add("ManagerId", int.class);
            dtContracts.getColumns().add("Price", float.class);
            dtContracts.getColumns().add("Date", Date.class);
            ds.getTables().add(dtContracts);
    
            // Add columns to Clients table
            dtClients.getColumns().add("Id", int.class);
            dtClients.getColumns().add("Name");
            ds.getTables().add(dtClients);
            ds.getRelations().add(dtClients,dtContracts, "Id","ClientId");
            ds.getRelations().add(dtManagers,dtContracts, "Id","ManagerId");
    

    单词模板是这样的:

    <<foreach [m in ds.Managers]>><<[m.Name]>>  <<[m.Contracts.sum(
    c => c.Price)]>><</foreach>>
    
    Total:  <<[ds.Contracts.
    sum(
    c => c.Price)]>>
    

    这似乎很简单,不需要根节点。

    我的密码

    我有以下XML结构:

    <root>
        <reference>b</reference>
        <caseHandler>
            <fullName>dddd</fullName>
            <active>true</active>
        </caseHandler>
        <name>This is the name of the case</name>
        <deadline>1528220937444</deadline>
        <associated>
            <code>ddd</code>
            <active>true</active>
            <id>-9</id>
            <parentScopeId>-3</parentScopeId>
            <title>ddddddddddd</title>
        </associated>
        <associated>
            <code>ddd</code>
            <active>true</active>
            <id>-9</id>
            <parentScopeId>-3</parentScopeId>
            <title>ddddddddddd</title>
        </associated>
    </root>
    

    我将XML加载到数据集中,如下所示:

    DataSet set = new DataSet("ds");
    set.readXml(new ByteArrayInputStream(escaped.getBytes()));
    
    log.info("XML " + otherXml);
    
    ReportingEngine engine = new ReportingEngine();
    engine.buildReport(doc, set);//model
    

    显然,这是最重要的 <root> xml标签。 我如何修改我的设置来摆脱这个额外的关卡?

    我的问题是,我需要用一个与这个“根”相关的“foreach”来包围word文件中的所有文本。

    <<foreach [c in root]>> 
    
    << [c.name] >> << [c.reference] >>
    
    Case Handler : 
    << [c.caseHandler.first().fullName] >>
    
    
    <<foreach [in c.associated]>>
        (<<[code]>>)    <<[title]>>                     <</foreach>>
    
    
     <</foreach>>
    

    这很烦人。。。

     << [ds.name] >> << [ds.reference] >>
    
        Case Handler : 
        << [ds.caseHandler.first().fullName] >>
    
    
        <<foreach [in ds.associated]>>
            (<<[code]>>)    <<[title]>>                     <</foreach>>
    

    如何简化结构,使我仍然能够读取XML,但不需要word文件中的额外开销?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tahir Manzoor    6 年前

    请使用ReportingEngine。生成如下所示的报告,以获得所需的输出。

    模板:<&书信电报;[ds.名称]>><&书信电报;[ds.参考]>>

    DataSet set = new DataSet("ds");
    set.readXml(MyDir + "in.xml");
    
    Document doc = new Document(MyDir + "template.docx");
    ReportingEngine engine = new ReportingEngine();
    engine.buildReport(doc, set.getTables().get("root").getRows().get(0), "ds");//model
    
    doc.save(MyDir + "output.docx");
    

    我与Aspose合作,担任开发人员布道者。

        2
  •  1
  •   Tahir Manzoor    6 年前

    模板:<&书信电报;[名称]>><&书信电报;[参考]>>

    DataSet set = new DataSet("ds");
    set.readXml(MyDir + "in.xml");
    
    Document doc = new Document(MyDir + "template.docx");
    ReportingEngine engine = new ReportingEngine();
    engine.setOptions(ReportBuildOptions.ALLOW_MISSING_MEMBERS);
    engine.buildReport(doc, new Object[]{set.getTables().get("root").getRows().get(0), set}, new String[] {"", "ds"});//model
    doc.save(MyDir + "output.docx");