Итак, я проверял примеры для Java и заметил пример, который использует InTableList.doc
/ InTableList
из https://github.com/aspose-words/Aspose.Words- для-Java / tree / master / Examples / src.
Асорт Code
Они создают DataSet вручную в файле Common.java. Небольшая подсекция кода:
// 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 следующим образом:
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". Очевидно, это тег <root>
xml. Как я могу измените мой набор, чтобы избавиться от этого дополнительного уровня?
Моя проблема в том, что мне нужно окружить весь текст в текстовом файле "foreach", который связан с этим "root".
<<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, но мне не нужны дополнительные накладные расходы в слове файл?
Пожалуйста, используйте ReportingEngine.buildReport, как показано ниже, чтобы получить желаемый результат.
Шаблон: < < [ds.name] > > < < [ds.reference] > >
Я работаю с Aspose как Developer Evangelist.
ds
, чтобы мы напрямую обращались к переменным? Используем ли мы только:engine.buildReport(doc, set.getTables().get("root").getRows().get(0));
Да, вы можете удалить ds из полей "name" и "reference". В этом случае вам нужно использовать метод ReportingEngine.buildReport (Document, Object [], String []), как показано ниже.
Шаблон: < < [name] > > > & Л; & Lt; [ссылка] & GT; & GT;