我用XML文件和XSD文件完成了xmlbean教程,并成功地访问了所有数据。
现在,我为XML和XSD文件添加名称空间,重新编译并重新创建jar文件。在此之后,包名在java文件中更改,但是这里我面临问题,因为每个xsd parameter.Following都是XSD文件。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="serverDetail">
<xsd:element name="ServerConfig">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="driverClassName" type="xsd:string"/>
<xsd:element name="url" type="xsd:string"/>
<xsd:element name="user" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
以下是xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Contains server details-->
<ServerConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="serverDetail" xsi:SchemaLocation="serverConfig.xsd">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<url>jdbc:mysql://localhost:3306/test</url>
<user>root</user>
<password>root</password>
</ServerConfig>下面是java类文件
import serverDetail.ServerConfigDocument;
import org.apache.xmlbeans.*;
String filePath = "E:/Gradle/DemoTest/src/serverConfig.xml";
java.io.File inputXMLFile = new java.io.File(filePath);
try {
ServerConfigDocument serverDoc= ServerConfigDocument.Factory.parse(inputXMLFile);
ServerConfigDocument.ServerConfig serverConfig=serverDoc.getServerConfig();
System.out.println("Server details\nDriverClassName " + serverConfig.getDriverClassName());
System.out.println("Url is " + serverConfig.getUrl());
System.out.println("User is " + serverConfig.getUser());
System.out.println("Password is " + serverConfig.getPassword());
} catch (XmlException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}所以这里我得到输出为null。
Server details
DriverClassName null
Url is null
User is null
Password is null这里有人能帮我吗..。
发布于 2015-02-20 12:59:06
简单回答:将elementFormDefault="qualified"添加到xsd:schema元素中。
正如目前所写的,您的模式在模式的ServerConfig中声明了一个顶级的targetNamespace元素,但是complexType中的“本地”元素声明不包含targetNamespace,因此XMLBeans需要一个类似于
<ns:ServerConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="serverDetail"
xsi:schemaLocation="serverDetail serverConfig.xsd">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<url>jdbc:mysql://localhost:3306/test</url>
<user>root</user>
<password>root</password>
</ns:ServerConfig>您没有提供任何没有命名空间的driverClassName、url等元素,因此XMLBeans为相应的属性正确地提供了null。
如果希望本地元素也在targetNamespace中,则需要将elementFormDefault="qualified"添加到架构中。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="serverDetail"
elementFormDefault="qualified">在此基础上,以下内容将成功地验证
<ServerConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="serverDetail"
xsi:schemaLocation="serverDetail serverConfig.xsd">
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
<url>jdbc:mysql://localhost:3306/test</url>
<user>root</user>
<password>root</password>
</ServerConfig>命名空间标识符通常应该是URI,所以您应该使用类似于serverDetail的urn:serverDetail或某种假的http:// URL。
https://stackoverflow.com/questions/28629245
复制相似问题