用于查询XSD文件的Java方法

DUF*_*UFF 5 java xml xsd

我有一组用于不同数据类型的xsd文件.在Java世界中,生成类型属性列表的最佳方法是什么?

例如,这两个文件.

file:customer.xsd

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="number" type="xs:integer"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

file:order.xsd

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="orderid" type="xs:integer"/>
      <xs:element name="customer" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我想做两件事

1.一个Java应用程序,它读入XSD并进行处理(不知何故?).因此,当您运行该程序时,它可以打印出属性

> java -jar printtypes.jar -f customer.xsd
> number : Integer
> name : String
> address : String
Run Code Online (Sandbox Code Playgroud)

2.某种生成新文件的转换

file:customer.properties

<propertylist>
<prop>
 <name> orderid </name>
 <type> integer </type>
</prop>
<prop>
 <name> customer </name>
 <type> string</type>
</prop>
</propertylist>
Run Code Online (Sandbox Code Playgroud)

我尝试使用java反射来实现上面(1)中的程序,以查询由JAXB生成的Java类.这创建了一个类的实例并询问了值和字段,但是在值由空序列组成的情况下它不起作用.由于类型擦除,无法返回到原始类型的值.你最终得到了一个空的ArrayList,但你不知道是什么.

我来自C++的工作,所以我现在有点迷失所有这些Java技术.我的Google权力让我失望 - 我见过的大多数JAVA/XSD帖子都谈到了验证,这不是我想要做的.

Bil*_*ill 2

您可能想研究一下 XSOM,它是一个项目,它将吸收您的 XML 模式并生成您可以遍历并产生所需结果的对象。

http://xsom.java.net/userguide.html

手动解析模式可能非常棘手,因为可能有不同的方式来表达基本相同的事情。