目标是根据给定的XSD将一些元素插入到现有的xml 文档中,作为Java appliaction的一部分。
问题是:具体的XSD只在运行时已知,因此像jaxb这样的标准解决方案不起作用,因为它们处理编译时已知的XSD。
我在编译时获得的唯一结构信息是要插入的元素的结构和父元素的名称。该元素的兄弟节点的顺序和名称仅在运行时在XSD内可用。
从更高级别我会说任务可以通过以下步骤完成:
问题在于第2步。我发现了一个类似的问题,要求解决该步骤:How to load XML tags order from XSD with Java?但这个问题没有答案。
答案 0 :(得分:1)
您可以尝试使用XML Schema Object Model来确定兄弟元素之间的顺序。我在项目中使用它来确定子元素的基数,这在将XML转换为JSON时非常重要,反之亦然。
需要付出一些努力来解决它,但它的效果非常好。
<强>更新强>
我认为XSOM是Xerces的一部分,或者至少Xerces实现了Post Schema Validation Infoset(PSVI)。假设您使用模式识别解析器解析输入XML文档,则可以访问PSVI并对其进行分析。阅读更多here。
答案 1 :(得分:0)
我可以建议以下内容。
不要使用JAXB。转到DOM。只需解析文档,在运行时针对您的XSD进行验证。验证可能会抛出异常,其中包含有关有问题片段位置的一些信息。使用此信息在DOM中查找父节点并添加缺少的节点。
我自己并没有尝试过,并担心实施不会像这个简短的描述那么容易,但希望它是可行的。
所以,祝你好运。我很高兴知道你将如何解决这个问题。