2012-04-19 27 views
0

基于某些条件,我需要生成一个只包含一组来自CSV的值的XML,从而得到一个值为CSV的流。例如,从Java中的CSV流内部化XML构造

Input : a:value1, b:value2, c:value3, d:value4, e:value5. 
if (condition1) 
XML O/P = <Request><ValueOfA>value1</ValueOfA><ValueOfE>value5</ValueOfE></Request> 
else if (condition2) 
XML O/P = <Request><ValueOfB>value2</ValueOfB><ValueOfD>value4</ValueOfD></Request> 

我想以一种给定模板的方式来外部化进程,从而生成相应的输出XML。字符串操作是实现这一点最简单的方法,但如果输入中出现一些特殊字符,我不想搞乱XML等。请建议。

+0

建议什么?你有什么尝试? – 2012-04-19 12:56:52

回答

0

我会建议创建一个xsd并使用JAXB来创建可用于生成XML的Java绑定类。

+1

认真创建一个XSD!使用JAXB注释对类进行注释会更容易。它很容易找出上述XML的映射。 – 2012-04-19 13:00:01

+0

每个人都喜欢以某种方式做事,我更喜欢使用xsd。这只是个人喜好的问题,因为任何一种方式都行得通。 – ChadNC 2012-04-19 14:33:34

0

我推荐自己的模板引擎(JATL http://code.google.com/p/jatl/)尽管它适合(X)HTML,但它也非常适合生成XML。

我没有打扰为你解决整个问题(即对输入进行双重分割(“,”,然后是“:”)。)但是这是如何使用JATL的。

final String a = "stuff"; 
    HtmlWriter html = new HtmlWriter() { 
     @Override 
     protected void build() { 
      //If condition1 
      start("Request").start("ValueOfA").text(a).end().end(); 
     } 
    }; 
    //Now write. 
    StringWriter writer = new StringWriter(); 
    String results = html.write(writer).getBuffer().toString(); 

这将产生

<Request><ValueOfA>stuff</ValueOfA></Request> 

所有正确的转义为您处理。