前言:我正在研究java的docx解析器。 docx格式基于xml。当我阅读文档时,其部件正在被解组(使用JAXB)。我得到一个基于xml标记的某些元素的树。
几乎问题:但是某些元素(在非常深的xml级别)不是从docx规范(即CTStyle,CTDrawing,CTInline等)返回的某个类,而是返回Object。这些对象确实是xerces类的实例,例如ElementNSImpl。
问题:我应该如何处理来自xerces的对象(例如ElementNSImpl)?最简单的方法是:
CTGraphicData gData = getGraphicData ();
Object obj = gData.getAny().get(0);
ElementNSImpl element = (ElementNSImpl)obj;
但它似乎不是一个好的解决方案。我从未直接使用过xerces。做这个演员的更好方法是什么? (如果有人也给我一个关于正确迭代节点的方法的提示,那就太好了。)
答案 0 :(得分:3)
因为XSD有一个'any',JAX-B正在将这段XML映射到DOM。您应该转换为'Element',而不是'ElementNSImpl'。然后,您必须使用DOM API(可能在XPath的帮助下)来提取数据。
如果JAXB为您提供了元素,并且您认为架构具有特定类型,而不是xs:any,则说明配置JAX-B的方式有问题。
xs:XSD中的任何一个意味着'任何'。
该元素使我们能够扩展 没有元素的XML文档 由架构指定。