从XSD文件中以编程方式创建特定的XML元素
问题描述:
我正在开发通用XML编辑器,需要能够以编程方式从XSD文件创建特定的子XML元素,然后可以将其添加到其他父节点。从XSD文件中以编程方式创建特定的XML元素
事情是这样的:
当我右击根元素“breakfast_menu”,上下文菜单弹出,并给了我一个选项,以一种新的食物元素添加进去。生成的新食品元素需要具有与其关联的所有子元素/属性(名称,价格等等,如XSD中定义的)。这是棘手的部分。
我用XSModel玩了一下,它使我能够检查XSD文件中定义的元素的定义。我还不确定到底有多大。这非常麻烦。
有没有更简单的方法来实现这个目标?理想情况下,我需要一个库,可以告诉我需要生成XSD中的哪个特定子元素,并生成org.w3c.dom。*对象(或类似的东西),我可以将它添加到我的节点树中。
我见过从xsd生成整个xml文件的解决方案,但生成最多的xml并不包含所有元素,即父元素不包含minOccurs =“0”的子元素定义。不过,这是我需要的那些孩子元素。
答
所以我发现了org.apache.xmlbeans。
这是非常有据可查的文件(与org.apache.xerces相比,这是一个痛苦的工作)。
我可以使用xmlbeans的SchemaType从xsd文件中提取xml类型信息,并为我的JTable手动创建org.w3c.dom.Nodes。
你实际上需要构建一个智能感知引擎,所以首先你需要弄清楚你在XML文件中的位置,然后你需要将它与你在XSD中的位置协调一致,然后你需要弄清楚给你的可能性位置和状态在XSD中。这由xsi:type和substitutionGroups进一步复杂化。如果您从头开始写这个很大的工作,我建议尝试从基于文本的编辑器中提取一些智能感知代码并对其进行调整,或者搁置几个星期并启动咖啡机。 – Sprotty