在java中使用xml模式创建xml文件
我尝试生成一些包含模式的xml文件。我使用jaxb从模式生成xml文件,但无法在此xml中添加模式。我想要的文件如下所示在java中使用xml模式创建xml文件,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我尝试生成一些包含模式的xml文件。我使用jaxb从模式生成xml文件,但无法在此xml中添加模式。我想要的文件如下所示 <transaction> <xs:schema id="transaction" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="tr
<transaction>
<xs:schema id="transaction" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="in" type="xs:string" minOccurs="0" />
<xs:element name="sn" type="xs:string" minOccurs="0" />
<xs:element name="book" type="xs:string" minOccurs="0" />
<xs:element name="author" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="dateTime" type="xs:dateTime" minOccurs="0" />
<xs:element name="key" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="productData">
<xs:complexType>
<xs:sequence>
<xs:element name="dateTime" type="xs:dateTime" minOccurs="0" />
<xs:element name="key" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<id>
<in>abcd</in>
<sn>1234567</sn>
<book>computer</book>
<author>klen</author>
</id>
<data>
<dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime>
<key>Err</key>
</data>
</transaction>
是否有任何方法可以更改代码,通过该代码我可以使用xml文件添加模式。我们的应用程序实际上会检查文件结构,如果它与我给出的示例不一样,那么它将被删除,因此我应该遵循这个结构来更新数据库
使用C#.NET平台可以生成带有模式的xml文件。在java中也可以 您的模式中没有任何内容表明应该将模式本身添加到实例文档中 您将需要以下内容:
<xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<!-- Adding an element that can supports the schema definition -->
<xs:element ref="xs:schema" minOccurs="0" maxOccurs="1"/>
<!-- and from here on, what you already have : -->
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="in" type="xs:string" minOccurs="0" />
<xs:element name="sn" type="xs:string" minOccurs="0" />
<xs:element name="book" type="xs:string" minOccurs="0" />
<xs:element name="author" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
...
...
然后,您必须将模式插入到事务JAXB对象中,以便它显示在您的实例文档中
现在,我想更多地了解您的用例:您确定需要这样做吗?
文档本身(事务XML)可以简单地指定它所遵循的模式,甚至可以指定一个位置,例如:
<transaction xmlns="urn:mytransactionschema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/transaction.xsd" >
这将使实例文档的使用者能够更好地验证XML,而不是将其包含在实例文档中。我知道在.NET平台中使用C#可以做到这一点,具有模式定义的XML文件是可能的。我认为在java中这是不可能的。我们的应用程序实际上会检查文件结构,如果它与我给出的示例不一样,那么它将被删除,所以我应该遵循这个结构来更新数据库。现在我的问题是如何使用jaxb添加这个xml文件。你能告诉我如何发送这个schema对象以及如何编组schema,通过它我可以生成带有schema的xml文件。问题是在实例文档中添加schema本身会使后者未能通过与前者的验证(可能是完全错误的)。这就是为什么您的JAXB对象没有现成的API。我假设您无论如何都不能更改模式,因为有一个应用程序使用它(并且您不能自己更改)。我会以这样或那样的方式使用XSLT将(静态)模式“注入”到封送的文档中(这个站点上有很多帖子可以帮助您实现这一点).但是,使用C#.net平台可以生成xml文件的模式。在java中也可以。很抱歉,我不清楚,您能简单描述一下吗?事实上,我是java新手,所以我无法理解您的建议。事实上,我没有更改我的模式,另一件事是如何用模式将xslt转换为xml。请给我一些答复。@Patrice Matignon你能告诉我如何发送这个模式对象以及如何编组模式,通过它我可以生成带有模式的xml文件。@Patrice Matignon很抱歉,我不清楚。你能简单地描述一下吗?实际上我是新来的事实上,我并没有改变我的模式,另一件事是如何用模式将xslt转换成xml。
<xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<!-- Adding an element that can supports the schema definition -->
<xs:element ref="xs:schema" minOccurs="0" maxOccurs="1"/>
<!-- and from here on, what you already have : -->
<xs:element name="id">
<xs:complexType>
<xs:sequence>
<xs:element name="in" type="xs:string" minOccurs="0" />
<xs:element name="sn" type="xs:string" minOccurs="0" />
<xs:element name="book" type="xs:string" minOccurs="0" />
<xs:element name="author" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
...
<transaction xmlns="urn:mytransactionschema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/transaction.xsd" >