我有以下格式的XML:
<servers>
<server_1>
<name>S1</name>
<user>User1</user>
<pass>pass1</pass>
</server_1>
<server_2>
<name>S2</name>
<user>User2</user>
<pass>pass2</pass>
</server_2>
<server_3>
<name>S3</name>
<user>User3</user>
<pass>pass3</pass>
</server_3>
</servers>
服务器下可以有多个子元素。我无法弄清楚如何使用JAXB unmarshel解析这些问题。如果孩子的姓名相同,我可以将他们列入名单。
我还查看了@XMLAnyElement注释,它允许我将这些元素放入列表中,但是我遇到了一些类型转换问题,因为这样做会给ElementNSImpl,然后我必须将它转换为一个简单的Server入口类。这是处理此类案件的唯一方法吗?
我不能在@ XMLElement的名称字段中使用正则表达式来填充忽略不同标记(server_1,server_2等)的这些条目,或者忽略不同子元素标记的任何其他方式。
我使用本指南来理解XMLAnyElement行为:http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html但这不是我的用例。
我想到的另一种方法是在取消XML文件之前修改父xml本身并使用Java FileReaders将server_X类型标记替换为服务器。
我会感谢帮助或指出我正确的方向。
编辑:我看到以下代码有效 -
..
..
@XmlAnyElement
public List<ElementNSImpl> getServer() {
return server;
}
..
..
public void printElem() {
if(server!=null) {
for(ElementNSImpl serverEntry :server) {
NodeList nodeList= ftpEntry.getChildNodes();
System.out.println("length:"+nodeList.getLength());
for(int i=0;i<nodeList.getLength()-1;i++)
System.out.println(nodeList.item(i).getNodeName()+" :"+nodeList.item(i).getTextContent());
}
}
}
但java直接使用ElementNSImpl发出警告信息:
Access restriction: The type 'ElementNSImpl' is not API (restriction on required library 'C:\Program Files (x86)\Java\jre1.8.0_171\lib\rt.jar')
所以我不确定是否可以像这样使用ElementNSImpl。