あなたはあなたがここ
#converted XML
#Tue Sep 19 15:15:57 CEST 2017
a.2.c=some-value4
a.2.b=some-value3
p=some-value-p
a.1.c=some-value2
a.1.b=some-value1
を取得する代わりに
root.a.0.b=some-value1
root.a.0.c=some-value2
root.a.1.b=some-value3
root.a.1.c=some-value4
root.p=some-value-p
のジャクソン
を使用することができ、テストコードです:
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import java.util.Properties;
import org.junit.Test;
public class TestXMLConversion {
public static final String XML =
"<root>\n" +
"<a>\n" +
" <b>some-value1</b>\n" +
" <c>some-value2</c>\n" +
"</a>\n" +
"<a>\n" +
" <b>some-value3</b>\n" +
" <c>some-value4</c>\n" +
"</a>\n" +
"<p>some-value-p</p>" +
"</root>";
public static class Root {
@JacksonXmlElementWrapper(useWrapping=false)
private List<A> a;
private String p;
public List<A> getA() {
return a;
}
public void setA(List<A> a) {
this.a = a;
}
public String getP() {
return p;
}
public void setP(String p) {
this.p = p;
}
}
public static class A {
private String b;
private String c;
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
@Test
public void test() throws IOException {
XmlMapper xmlMapper = new XmlMapper();
Root parsedData = xmlMapper.readValue(new StringReader(XML), Root.class);
JavaPropsMapper propertiesMapper = new JavaPropsMapper();
Properties properties = propertiesMapper.writeValueAsProperties(parsedData);
properties.store(System.out, "converted XML");
}
}
私が使用した依存関係:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-properties</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
あなたはすべてのリーフノードを探し、そしてドットで彼らの親階層を連結することができ、おそらく子供のためのいくつかの余分なロジックが必要になります。 – epoch