JAXB 问题(一)

1. 从XML读取数据时,找不到相应的标签类。

  1. person.xsd文件

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xs:schema version="1.0"
        targetNamespace="http://xml.javainthebox.net"
        xmlns:tns="http://xml.javainthebox.net"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="persons">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:person"
                        minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="person">
        <xs:complexType>
          <xs:attribute name="name" type="xs:string"/>
          <xs:attribute name="age" type="xs:int"/>
          <xs:attribute name="sex" type="tns:sex"/>
        </xs:complexType>
      </xs:element>
      <xs:simpleType name="sex">
        <xs:restriction base="xs:string">
          <xs:enumeration value="MALE"/>
          <xs:enumeration value="FEMALE"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:schema>
    
  2. artists.xml文件

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <persons>
      <person name="Neil Young" age="62" sex="MALE" />
      <person name="Bob Dylan" age="67" sex="MALE" />
      <person name="Joni Mitchell" age="65" sex="FEMALE" />
    </persons>
    
  3. UnmarshallerSample.java文件

    import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;
    import net.javainthebox.xml.Persons;
    import net.javainthebox.xml.Person;
    public class UnmarshallerSample {
        public UnmarshallerSample() {
            try {
                JAXBContext context
                    = JAXBContext.newInstance("net.javainthebox.xml");
                Unmarshaller unmarshaller = context.createUnmarshaller();
                File file = new File("artists.xml");
                Object obj = unmarshaller.unmarshal(file);
                Persons artists = (Persons)obj;
                java.util.List<Person> p = artists.getPerson();
                for (Person person: artists.getPerson()) {
                    System.out.printf("%s\tAge: %2d Sex: %s%n",
                                      person.getName(),
                                      person.getAge(),
                                      person.getSex());
                }
            } catch (JAXBException ex) {
                System.out.println(ex.getMessage());
            }
        }
        public static void main(String[] args) {
            new UnmarshallerSample();
        }
    }
    

    按顺序执行:

    C:\jaxb>xjc persons.xsd
    C:\jaxb>javac net\javainthebox\xml\ObjectFactory.java
    C:\jaxb>javac net\javainthebox\xml\package-info.java
    C:\jaxb>javac UnmarshallerSample.java
    C:\jaxb>java UnmarshallerSample
    

    执行完后,出现下面错误:

    没有预期的元素(URI:””、ローカル:”persons”)。预期的元素是{http://xml.javainthebox.net}person,{http://xml.javainthebox.net}persons。

    解决方法:修改artists.xml
    修改前:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <persons>
      <person name="Neil Young" age="62" sex="MALE" />
      <person name="Bob Dylan" age="67" sex="MALE" />
      <person name="Joni Mitchell" age="65" sex="FEMALE" />
    </persons>
    

    修改后:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <persons xmlns="http://xml.javainthebox.net" >
      <person name="Neil Young" age="62" sex="MALE" />
      <person name="Bob Dylan" age="67" sex="MALE" />
      <person name="Joni Mitchell" age="65" sex="FEMALE" />
    </persons>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值