从JAXB的XSD创建XML文件

Col*_*747 6 java xml xsd jaxb

我在使用JAXB从XSD创建XML文件时遇到问题,下面是用于创建它的XSD文件.(注意:由于机密性,名称已被编辑)

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://ibm.org/seleniumframework" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Test" type="sel:Test">
        <xs:complexType>
            <xs:choice minOccurs="1" maxOccurs="unbounded">
                <xs:element name="Option1" type="sel:Option1Type" xmlns:sel="http://ibm.org/seleniumframework"/>
                <xs:element name="Option2" type="sel:Option2Type" xmlns:sel="http://ibm.org/seleniumframework"/>
                <xs:element name="Option3" type="sel:ScreensType" xmlns:sel="http://ibm.org/seleniumframework"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="ScreensType">
        <xs:sequence>
            <xs:element type="sel:ScreenType" name="Screen" minOccurs="1" maxOccurs="unbounded" xmlns:sel="http://ibm.org/seleniumframework"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ScreenType">
        <xs:sequence>
            <xs:element name="ScreenData" minOccurs="1" maxOccurs="unbounded" xmlns:sel="http://ibm.org/seleniumframework"/>
        </xs:sequence>
        <xs:attribute type="xs:string" name="name1" use="required" />
        <xs:attribute type="xs:string" name="name2" use="required" />
        <xs:attribute type="xs:string" name="name3" use="required" />
    </xs:complexType>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

这是我用来尝试创建XML的代码:

public void generateXml() throws JAXBException, IOException {

            Test test = new Test();
            ScreensType screens = new ScreensType();
            ScreenType screen = new ScreenType();
            screen.setName1("a");
            screen.setName2("b");
            screen.setName3("c");

            File f = new File("new.xml");
            JAXBContext context= JAXBContext.newInstance("com.q1labs.qa.xmlgenerator.model.generatedxmlclasses");
            Marshaller jaxbMarshaller = context.createMarshaller();
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            jaxbMarshaller.marshal(test, f);
            jaxbMarshaller.marshal(test, System.out);

        }
Run Code Online (Sandbox Code Playgroud)

这是输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Test xmlns="http://ibm.org/seleniumframework"/>
Run Code Online (Sandbox Code Playgroud)

如何获取代码输出屏幕和屏幕标签及其属性,我不知道我做错了什么.

bdo*_*han 5

您创建的实例TestScreensType,但他们编组到XML从未见过他们的任何属性.以下是更正后的代码.

public void generateXml() throws JAXBException, IOException {
    Test test = new Test();
    ScreensType screens = new ScreensType();
    test.getOption1OrOption2OrOption3().add(screens);
    ScreenType screen = new ScreenType();
    screen.setName1("a");
    screen.setName2("b");
    screen.setName3("c");
    screens.getScreen().add(screen);

    File f = new File("new.xml");
    JAXBContext context= JAXBContext.newInstance("com.q1labs.qa.xmlgenerator.model.generatedxmlclasses");
    Marshaller jaxbMarshaller = context.createMarshaller();
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    jaxbMarshaller.marshal(test, f);
    jaxbMarshaller.marshal(test, System.out);
}
Run Code Online (Sandbox Code Playgroud)

产量

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Test xmlns="http://ibm.org/seleniumframework">
    <Option3>
        <Screen name1="a" name2="b" name3="c"/>
    </Option3>
</Test>
Run Code Online (Sandbox Code Playgroud)