尊敬的先生,
我必须使用smooks介体将大型xml转换为csv格式。但是会出错。请指导。 在这里,我在两个标签library和library1中都有书籍结构(模型)。
下面是数据较少的示例示例:
我的输入是:
<?xml version="1.0"?>
<catalog>
<library>
<book id="bk101">
<name>a</name>
<title>b</title>
</book>
<book id="bk102">
<name>c</name>
<title>d</title>
</book>
</library>
<library1>
<book id="bk103">
<author>e</author>
<title>f</title>
</book>
<book id="bk104">
<author>g</author>
<title>h</title>
</book>
</library1>
</catalog>
SmooksConfig.xml:
<?xml version="1.0" encoding="UTF-8"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<params>
<param name="stream.filter.type">SAX</param>
<!-- <param name="inputType">input.xml</param>
<param name="input.xml" type="input.type.actived">File:/C:\Work\2016\09_ESB_Auto_Mail_rpts\TestFiles\TestFileXMLCSVMap.xml
</param> -->
<param name="default.serialization.on">true</param>
</params>
<resource-config selector="book">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="library">
<ftl:template>
<!--author;title
<?TEMPLATE-SPLIT-PI?>
-->
</ftl:template>
</ftl:freemarker>
<ftl:freemarker applyOnElement="book">
<ftl:template>
<!--${book.name},${book.title}
-->
</ftl:template>
</ftl:freemarker>
<ftl:freemarker applyOnElement="library1">
<ftl:template>
<!--<#ftl >
<?TEMPLATE-SPLIT-PI?>
-->
</ftl:template>
</ftl:freemarker>
<ftl:freemarker applyOnElement="book">
<ftl:template>
<!--<#ftl >${book.author},${book.title}
-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>
所需的输出:
author;title
a,b
c,d
e,f
g,h
实际异常:
018-07-15 21:59:03,584] [EI-Core]错误-SmooksMediator无法过滤源。 org.milyn.SmooksException:无法过滤源。 在org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:97)
由以下原因引起:org.milyn.delivery.sax.SAXWriterAccessException:SAX访问者“ org.milyn.templating.freemarker.FreeMarkerTemplateProcessor”对元素“ book”的非法访问。 SAX访问者“ org.milyn.templating.freemarker.FreeMarkerTemplateProcessor”已获得作家。请参见SAXElement javadocs(http://milyn.codehaus.org/Smooks)。更改Smooks访问者资源配置。 在org.milyn.delivery.sax.SAXHandler $ WriterManagedSAXElement.throwSAXWriterAccessException(SAXHandler.java:632) 在org.milyn.delivery.sax.SAXHandler $ WriterManagedSAXElement.getWriter(SAXHandler.java:597)
... 19 more
[2018-07-15 21:59:03,589] [EI-Core]错误-SequenceMediator无法过滤源。造成原因过滤源失败。 org.wso2.carbon.mediator.service.MediatorException:无法过滤源。造成原因过滤源失败。 在org.wso2.carbon.mediator.transform.SmooksMediator.handleException(SmooksMediator.java:265)
实际输出:未生成文件。
谨此问候, 阿迪亚(Aditya)