Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB在解组元素列表时获取原始xml_Java_Xml_Jaxb - Fatal编程技术网

Java JAXB在解组元素列表时获取原始xml

Java JAXB在解组元素列表时获取原始xml,java,xml,jaxb,Java,Xml,Jaxb,我有一个xml输入,如下所示 <Confirmations> <SystemConf> <SysCnf> <MessageId>1</MessageId> </SysCnf> <SysCnf> <MessageId>2</MessageId> </SysCnf> </SystemConf>

我有一个xml输入,如下所示

<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不是强制性的,我可以自己编写一些程序,但希望避免任何自定义内容。