Java JAXB:解组和修改混合内容
我已经开始从JAXB库学习Java。我的目标是解组和修改JATSXML,它有很多混合内容。实际上,如果简化,XML如下所示:Java JAXB:解组和修改混合内容,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我已经开始从JAXB库学习Java。我的目标是解组和修改JATSXML,它有很多混合内容。实际上,如果简化,XML如下所示: <article> <body> <sec> <title>text</title> <list></list> <sec><p></p></sec> <p>
<article>
<body>
<sec>
<title>text</title>
<list></list>
<sec><p></p></sec>
<p>
text
<junk>text</junk>
<morejunk>text</morejunk>
</p>
<anotherjunkcontent>text</anotherjunkcontent>
</sec>
</body>
</article>
我的部分代码是,对xml进行解组和整理:
public class transformMain {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller unmarhsaller = jaxbContext.createUnmarshaller();
Article article = (Article) unmarhsaller.unmarshal(new File("article.xml"));
Body elementBody = article.getBody();
List<Sec> listSec = elementBody.getSec();
for (Sec eSec : listSec) {
List<Object> listObjectsInSec = eSec.getContent();
for (Object insideList : listObjectsInSec) {
//ToDO something here to get content, modify it and put it back
//System.out.println(insideList);
}
}
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(article, new File("article2.xml"));
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
}
}
public类transformMain{
公共静态void main(字符串[]args)抛出JAXBEException{
JAXBContext JAXBContext=JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller unmarhsaller=jaxbContext.createUnmarshaller();
Article=(Article)unmarhsaller.unmarshal(新文件(“Article.xml”);
Body elementBody=article.getBody();
List listSec=elementBody.getSec();
对于(秒eSec:listSec){
List listObjectsInSec=eSec.getContent();
for(对象内部列表:listObjectsInSec){
//在此处执行某些操作以获取内容、修改内容并将其放回
//System.out.println(内部列表);
}
}
Marshaller=jaxbContext.createMarshaller();
marshaller.marshall(文章,新文件(“article2.xml”);
setProperty(marshaller.JAXB_格式化的_输出,true);
}
}
我怎么办?行
System.out.println(内部列表)代码>给我一个对象列表,比如…对象。Title@4f6f416f
或…对象。P@3b8f0a79
。如何从中检索数据?toString()或String.valueOf()在这种情况下不起作用,可能是因为它们没有可以表示为字符串的值。我在编程方面没有经验,所以这可能是显而易见的?JAXB在您希望将对象序列化为XML然后再序列化回来(例如webservices)时非常有用。XML太宽,JAXB无法方便地管理。我并不是说这是不可能的,但最终你可能会遇到一些难以使用、几乎无法更新的东西。当文档允许混合内容或任何内容时,您应该依赖DOM、SAX或Stax。对我来说,使用对象比使用节点元素更好。希望我能用JAXB找到好的解决方案。您可以使用instanceOf
找到它可以转换到的对象。然后将其强制转换到该对象
,以检索值。
public class transformMain {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller unmarhsaller = jaxbContext.createUnmarshaller();
Article article = (Article) unmarhsaller.unmarshal(new File("article.xml"));
Body elementBody = article.getBody();
List<Sec> listSec = elementBody.getSec();
for (Sec eSec : listSec) {
List<Object> listObjectsInSec = eSec.getContent();
for (Object insideList : listObjectsInSec) {
//ToDO something here to get content, modify it and put it back
//System.out.println(insideList);
}
}
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(article, new File("article2.xml"));
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
}
}