java在解组xml时忽略前缀(命名空间)
我有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<s:XXMsg xmlns:s="com:sample:test:msg">
<s:Header>
<s:cpyCod>xxx</s:cpyCod>
<s:appCod>yyy</s:appCod>
</s:Header>
</s:XXMsg>
我希望将其解组到以下Java类中:
public class XXHeader
{
private String cpyCod;
private String appCod;
}
我编写了以下代码:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true);
try
{
XMLStreamReader streamReader = inputFactory
.createXMLStreamReader(Test.class.getClassLoader().getResourceAsStream("xxmsg.xml"));
while (streamReader.hasNext())
{
int next = streamReader.next();
if (streamReader.getEventType() == XMLStreamReader.START_ELEMENT
&& streamReader.getLocalName().equals("Header"))
{
JAXBContext context = JAXBContext.newInstance(XXHeader.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
XXHeader xxHeader = unmarshaller.unmarshal(streamReader, XXHeader.class).getValue();
System.out.println(xxHeader);
break;
}
}
我将XXHeader
的所有字段值作为null
获取。但是如果我确实更改了xml并删除了每个元素中的前缀s:
,那么我就得到了正确的值
如何在解组以获得正确值时忽略此前缀
PS:不鼓励在XXHeader
类中使用@XML**
注释
# 1 楼答案
我可以使用前面提到的here来实现这一点:
并在前面的代码中添加该行:
# 2 楼答案
Here您可以找到有关忽略名称空间的有用信息,或者您可以定义XML模式(带有字段描述)并使用它来代替
com:sample:test:msg