有下面一段xsd的代码,我想问问,有什么类,或者什么开发包,能够读这段 xsd 然后 生成一个新的类,这个新的类能够记录
<xsd:element maxOccurs="1" minOccurs="0" name="v1" type="xsd:string"/> 这一行,其中,value 和 name 要跟据读的内容而生成相应类型和值,比如,value 是 int 型的,就要生成 Integerclass par {
String name;
String value;
}<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="T1">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="v1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:element maxOccurs="1" minOccurs="0" name="v1" type="xsd:string"/> 这一行,其中,value 和 name 要跟据读的内容而生成相应类型和值,比如,value 是 int 型的,就要生成 Integerclass par {
String name;
String value;
}<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="T1">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="v1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="T1">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0" name="v1" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>这个 Schema 文件生成的类是这样的://
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2011.01.01 at 11:10:25 下午 CST
//
package com;import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="v1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"v1"
})
@XmlRootElement(name = "T1")
public class T1 { protected String v1; /**
* Gets the value of the v1 property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getV1() {
return v1;
} /**
* Sets the value of the v1 property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setV1(String value) {
this.v1 = value;
}
}
绝对不会生成这种名字不知道从什么地方来的东西!class par {
String name;
String value;
}
按楼上的说法,JAXB 会生成一个 *.java 文件。 如果在实际的使用中,如果我们事先不知道 schema 是个什么样子,但是需要动态的生成相应的类,是不是要经历,生成java文件,将这个java文件编译,生成class文件的这样的一个过程呢?现在有两个问题:1 有比这个过程更简单一点的方法么?2 如果需要按照这个过成,那么是不是就要 runtime 对 java 进行编译,然后,找到 class, 加载它,调用其中的一些方法(方法有可能在这个 class,或者别的 已经有的类中)。我是先这么做过,但是对于程序何时编译完成生成 class 不是很有把握,总是写一个循环,不断的检测某个特定的文件夹,感觉方法有点笨,有新的方法么?谢谢
其中一个就是apache开源项目我经常这么干,不过是生成Schema以后要自己手动编辑一把
以为你的XML文件可以不是标准的,所以要就有点XML/XSL的语法基础火龙果的思路绝对正确!其他人回帖的思路值得商榷
因为在运行的时候,事先不知道XML里面的内容是什么样子,只用从服务器上面下载下来一个shceme(*.xsd)字符串片段,然后分析这个字符串片段。也就是说,客户端事先不太可能知道是什么样子。用动态的加载,比如一个页面,事先不知道,只有知道了scheme才能做出这个页面的