是否有java API来生成具有内联模式定义的xml

是否有java API来生成具有内联模式定义的xml,java,xml,jakarta-ee,xsd,Java,Xml,Jakarta Ee,Xsd,我想用java生成包含其模式和xml数据的xml文件,据我所知,这在C#NET中是可能的 我的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="tran

我想用java生成包含其模式和xml数据的xml文件,据我所知,这在C#NET中是可能的

我的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>computer</in>
    <sn>1234567</sn>
    <book>JAVA</book>
    <author>klen</author>
  </id>
  <data>
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime>
    <key>Err</key>
  </data>
</transaction>
但是我不能在xml文件中添加内联xml模式部分

@jtahlborn好的,谢谢你的帮助,我会尽力把它挖出来。我还有一个问题,我听说stax比dom更适合xml编写,所以我想使用stax是否可以设置名称空间和其他东西。我还有一个问题,jaxb只用于将xml转换为xml模式(取消封送)和将xml模式转换为xml(封送),如果我需要编写xml文件,那么我们需要使用jaxb[DOM、STAX(基于流的读写)、SAX(仅流读取)]。

您会:

  • 从模式创建DOM文档(例如,解析模式文件)
  • 创建新的DOM文档
  • 将根节点添加到新的DOM文档中(例如“事务”)
  • 追加步骤1中的架构文档。作为“transaction”元素的第一个子元素
  • 将实际文档数据附加为“transaction”元素的后续子元素
  • 或者,如果希望使用JAXB生成“主”xml输出,则可以:

  • 填充jaxb模型(从模式创建)
  • 将jaxb模型封送到DOM文档
  • 从模式创建DOM文档(例如,解析模式文件)
  • 插入步骤3中的模式文档。作为DOM文档中“transaction”元素的第一个子元素
  • (使用一些jaxb配置技巧,您可能会使事务模型具有元素“schema”属性,然后您可以从解析的schema文档中设置该属性,并一次性封送整个模型)

    您可以:

  • 从模式创建DOM文档(例如,解析模式文件)
  • 创建新的DOM文档
  • 将根节点添加到新的DOM文档中(例如“事务”)
  • 追加步骤1中的架构文档。作为“transaction”元素的第一个子元素
  • 将实际文档数据附加为“transaction”元素的后续子元素
  • 或者,如果希望使用JAXB生成“主”xml输出,则可以:

  • 填充jaxb模型(从模式创建)
  • 将jaxb模型封送到DOM文档
  • 从模式创建DOM文档(例如,解析模式文件)
  • 插入步骤3中的模式文档。作为DOM文档中“transaction”元素的第一个子元素


  • (使用一些jaxb配置技巧,您可能会使事务模型具有元素“schema”属性,然后可以从解析的schema文档中设置该属性,并一次性封送整个模型)

    主要问题是什么?您尝试过什么?@Adel我想在生成的xml文件中添加我的模式在C#中是可能的,但在java中是可能的。@josh我用谷歌搜索它以获取java我得到的答案是JAXB通过marchaling我们从模式中获取xml文件,但我们没有用该xml文件添加模式定义。@josh是否可以使用jaxp从模式中生成xml文件?@moin I假设您正在使用“内联模式”定义从java封送xml文档。你可能想用相应的措辞回答你的问题。主要问题是什么?您尝试过什么?@Adel我想在生成的xml文件中添加我的模式在C#中是可能的,但在java中是可能的。@josh我用谷歌搜索它以获取java我得到的答案是JAXB通过marchaling我们从模式中获取xml文件,但我们没有用该xml文件添加模式定义。@josh是否可以使用jaxp从模式中生成xml文件?@moin I假设您正在使用“内联模式”定义从java封送xml文档。你可能想相应地表达你的问题。这是一项非常繁琐的工作,不可能像c#那样简单地完成。在java中使用jaxb或其他API?@moin-我不知道c#,所以我不知道“喜欢c#”是什么意思。java中有多种生成xml的方法,但没有更多细节,只有c#&java专家可能会给你更有针对性的建议。是的,你是对的。实际上我想知道,我可以使用jaxb或其他api在java中使用内联模式生成xml文件吗?事实上,我没有显示原始xml文件,它的大小非常大,因此很难通过手动编码在xml中手动编码添加节点,所以我想要这个xml文件将使用内联模式生成的api类型我仅使用set()设置节点的值方法?事实上,我是java新手,你能给我一些步骤3和步骤4的代码剪贴吗?因为我不知道如何在tag@moin-您应该能够在本网站上找到大量其他示例,它们向您展示了如何将文件解析为DOM文档以及如何操作DOM文档中的节点/元素。这是一项非常繁琐的工作,不可能像c#那样简单地完成。在java中使用jaxb或其他API?@moin-我不知道c#,所以我不知道“喜欢c#”是什么意思。java中有多种生成xml的方法,但没有更多细节,只有c#&java专家可能会给你更有针对性的建议。是的,你是对的。实际上我想知道,我可以使用jaxb或其他api在java中使用内联模式生成xml文件吗?事实上,我没有显示原始xml文件,它的大小非常大,因此很难通过手动编码在xml中手动编码添加节点,所以我想要这个xml文件将使用内联模式生成的api类型我仅使用set()设置节点的值方法?事实上,我是java新手,你能给我一些步骤3和步骤4的代码剪贴吗?因为我不知道如何在tag@moin-你应该能找到大量的o
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
                jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT,true);
            jaxbMarshaller.marshal(transaction, file);
            jaxbMarshaller.marshal(transaction, System.out);