Java JAXB在解组元素列表时获取原始xml
我有一个xml输入,如下所示Java JAXB在解组元素列表时获取原始xml,java,xml,jaxb,Java,Xml,Jaxb,我有一个xml输入,如下所示 <Confirmations> <SystemConf> <SysCnf> <MessageId>1</MessageId> </SysCnf> <SysCnf> <MessageId>2</MessageId> </SysCnf> </SystemConf>
<Confirmations>
<SystemConf>
<SysCnf>
<MessageId>1</MessageId>
</SysCnf>
<SysCnf>
<MessageId>2</MessageId>
</SysCnf>
</SystemConf>
</Confirmations>
这些是我的课
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Confirmations")
public class Confirmations
{
@XmlElementWrapper(name = "SystemConf")
@XmlElement(name = "SysCnf")
private List<SystemConfirmation> systemConfirmations = null;
public List<SystemConfirmation> getSystemConfirmations()
{
return systemConfirmations;
}
public void setSystemConfirmations(List<SystemConfirmation> systemConfirmations)
{
this.systemConfirmations = systemConfirmations;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SysCnf")
public class SystemConfirmation
{
@XmlElement(name = "MessageId")
private String messageId;
public void setMessageId(String messageId)
{
this.messageId = messageId;
}
public String getMessageId()
{
return messageId;
}
@XmlAnyElement(value = SysConfXmlStringHandler.class)
private String xml;
public String getXml()
{
return xml;
}
}
public class SysConfXmlStringHandler implements DomHandler<String, StreamResult>
{
private static final String SYSCONF_START_TAG = "<SycCnf>";
private static final String SYSCONF_END_TAG = "</SysCnf>";
private StringWriter xmlWriter = new StringWriter();
@Override
public StreamResult createUnmarshaller(ValidationEventHandler errorHandler)
{
return new StreamResult(xmlWriter);
}
@Override
public String getElement(StreamResult rt)
{
String xml = rt.getWriter().toString();
System.out.println(xml);
int beginIndex = xml.indexOf(SYSCONF_START_TAG) + SYSCONF_START_TAG.length();
int endIndex = xml.indexOf(SYSCONF_END_TAG);
return xml.substring(beginIndex, endIndex);
}
@Override
public Source marshal(String n, ValidationEventHandler errorHandler)
{
try
{
String xml = SYSCONF_START_TAG + n.trim() + SYSCONF_END_TAG;
StringReader xmlReader = new StringReader(xml);
return new StreamSource(xmlReader);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
}
问题:
在SystemConfirmation类的xml字段中,我需要特定SystemConfirmation块xmml元素的整个xml,如下所示
<SysCnf>
<MessageId>1</MessageId>
</SysCnf>
有人知道如何做到这一点吗?我尝试了上面的代码,但我只在xml中获得MessageId块,如果我在SystemConfirmation中添加多个字段,我只会得到第一个字段。它需要是JAXB,还是可以使用其他LIB?JAXB不是强制性的,我可以自己编写一些程序,但希望避免任何自定义内容。