Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用xml模式创建xml文件_Java_Xml_Jaxb_Xsd - Fatal编程技术网

在java中使用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

我尝试生成一些包含模式的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="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" >