Java 如何根据运行时已知的XSD更新xml?

Java 如何根据运行时已知的XSD更新xml?,java,xml,xsd,Java,Xml,Xsd,目标是根据给定的XSD将一些元素插入现有xml文档中,作为java应用程序的一部分 问题是:具体的XSD只在运行时已知,因此像jaxb这样的标准解决方案不起作用,因为它们处理编译时已知的XSD 我在编译时仅有的结构信息是要插入的元素的结构和父元素的名称。该元素同级的顺序和名称仅在运行时在XSD中可用 从更高的层面上讲,我认为这项任务可以通过以下步骤完成: 解析xml构建文档树 确定插入元素的正确位置(我可以提出以下建议 不要使用JAXB。转到DOM。只需解析文档,在运行时根据XSD对其进行验证。

目标是根据给定的XSD将一些元素插入现有xml文档中,作为java应用程序的一部分

问题是:具体的XSD只在运行时已知,因此像jaxb这样的标准解决方案不起作用,因为它们处理编译时已知的XSD

我在编译时仅有的结构信息是要插入的元素的结构和父元素的名称。该元素同级的顺序和名称仅在运行时在XSD中可用

从更高的层面上讲,我认为这项任务可以通过以下步骤完成:

  • 解析xml构建文档树

  • 确定插入元素的正确位置(我可以提出以下建议

    不要使用JAXB。转到DOM。只需解析文档,在运行时根据XSD对其进行验证。验证可能会引发异常,其中包含有关问题片段位置的一些信息。使用此信息可以在DOM中定位父节点并添加缺少的节点

    我自己并没有尝试过这一点,我担心实现不会像这个简短的描述那么容易,但希望它是可行的

    所以,祝你好运。我很高兴知道你将如何解决这个问题。

    你可以尝试使用来计算兄弟元素之间的顺序。我在一个项目中使用了它来确定子元素的基数,这在将XML转换为JSON时非常重要,反之亦然

    摸索它需要一些努力,但效果相当好

    更新


    我认为XSOM是Xerces的一部分,或者至少Xerces实现了模式验证后信息集(PSVI)。假设您使用支持模式的解析器解析输入XML文档,您可以访问PSVI并对其进行分析。请阅读更多。

    如果您在编译时知道XSD,您会怎么做?您将如何使用JAXB实现#2?请检查以下内容:如果XSD在编译时得到修复,我将创建JAXB绑定,解组XML,更新内容ree并将其封送为最后一步当查看项目页面时,项目似乎已经死了:不再有下载页面,JIRA只包含几年前的少量问题。我目前的方法是使用xerces获得“待插入”的兄弟姐妹的有序列表-元素,然后将其插入到正确的位置