class foo
{
public static List parse(String input_xml)
{
try {
// JAXB context created.
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
ByteArrayInputStream input = new ByteArrayInputStream(input_xml.getBytes());
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
// Error comes while unmarshalling the input
Root root = (Root) jaxbUnmarshaller.unmarshal(input);
HashMap<String,String> map1 = new HashMap<String,String>();
//... Code to retrieve values from "root" and put it in list
}
}
public static void main(String[] args)
{
String input= "<?xml version=\"1.0\"?>"
+"<root>"
+"<attribs R:SSB:12 = \"ABC\"/>" +
"</root>";
List list = parse(input);
}
}
问题:在解析时,我收到此错误:“在元素类型或属性名称中找到了无效的第二个':'。” ....但我找不到任何帮助......在我的情况下,属性名称和值是动态的。
感谢您的帮助!!! * /
答案 0 :(得分:0)
问题是您尝试使用无效的XML提供JAXB:
<attribs R:SSB:12 = "ABC">
冒号符号在XML中具有特殊含义:它在该命名空间下分隔namespace和属性(或标记)名称。这就是属性(或标签)只能包含一个冒号的原因。
如果您的属性名称来自其他地方,则必须转义冒号以使其成为有效的XML属性。尝试使用短划线符号(-
)替换冒号,例如:
<attribs R-SSB-12="ABC">
答案 1 :(得分:0)
额外:
导致问题,因为默认情况下JAXB期望:
后面的部分是名称空间前缀。您可以通过强制JAXB使用不支持名称空间的解析器来解决此问题。
这可以通过SAX解析器轻松完成,并利用JAXB的UnmarshallerHandler
作为ContentHandler
。
完整示例