如何验证xml文件符合xml Schema或xml DTD规范; (100分)

  • 主题发起人 主题发起人 wsm
  • 开始时间 开始时间
W

wsm

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题是:根据已经存在的行业xml Schema或xml DTD规范,不同的用户生成了不同的xml文件,
我想验证不同用户生成的xml文件是否符合行业xml Schema或xml DTD规范。
采用xml Schema验证xml文件,运行时出现下面错误,是否我的xml schema文件定义有错(经过xml spy的验证)?
或者需要采用DTD文件进行验证?,xml文件和xml schema文件在同一目录下。
运行时出现下面错误:
Error: URI=interfaceMsg.xml Line=4:do
cument root element "消息", must matchdo
C
TYPE root "null".
Error: URI=interfaceMsg.xml Line=4:do
cument is invalid: no grammar found.
下面为测试程序:
import javax.xml.parsers.*;
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class testXML2 {
public static void main(String[] args) {
try{
/*
SAXParser parser;
HandlerBase handler = new HandlerBase();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
parser = factory.newSAXParser();
parser.parse(args[0], handler);

catch (SAXException se) {
// handle error
}
catch (IOException ioe) {
// handle error
}
catch (ParserConfigurationException pce) {
// handle error
}
*/
DocumentBuilder builder;
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
//String location = "http://myserver/mycontent.xml";
try{
builder = factory.newDocumentBuilder();
//builder.setErrorHandler(null);
Documentdo
cument = builder.parse(args[0]);
}
catch (SAXException se)
{
System.out.println("there is error"+se.getMessage());
// handle error.Java API for XML Parsing Version 1.0 17
}
catch (IOException ioe)
{
System.out.println("there is error"+ioe.getMessage());
// handle error
}
catch (ParserConfigurationException pce)
{
System.out.println("there is error"+pce.getMessage());
// handle error
}

System.out.println("it is parsed interfaceMsg.xml");
}
catch(Exception e){
System.out.println("there is error"+e.getMessage());
}

}
}
下面为xml schema文件interfaceMsgSchema.xml
<?xml version="1.0" encoding="GB2312"?>
<!-- edited by wangshm (CATTSoft) -->
<Schema name="interfaceMsgSchema.xml"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="流水号" dt:type="string"/>
<ElementType name="消息类型" dt:type="string"/>
<ElementType name="url" dt:type="uri"/>
<ElementType name="用户名" dt:type="string"/>
<ElementType name="密码" dt:type="string"/>
<ElementType name="回应信息" dt:type="int"/>
<ElementType name="消息">
<element type="消息类型"/>
<element type="流水号"/>
<element type="url"/>
<element type="用户名"/>
<element type="密码"/>
<element type="回应信息"/>
</ElementType>
</Schema>
下面为xml文件interfaceMsg:
<?xml version="1.0" encoding="gb2312"?>
<!-- edited by wangshm (CATTSoft) -->
<!--Sample XML file generated by XML schema-->
<消息 xmlns="x-schema:interfaceMsgSchema.xml">
<消息类型>11</消息类型>
<流水号>11</流水号>
<url>ftp://192.168.141.114:21/root/xml01.xml</url>
<用户名>administrator</用户名>
<密码>cattsoft</密码>
<回应信息>100</回应信息>
</消息>
 
怎么啦,你把这xml load近来,打开validate开关,有效果没有?你卡在哪儿了?
 
运行时出现下面错误:
E:/Test>java -classpath .;e:/Test/xerces.jar testXML2 interfaceMsg.xml
Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
set, which is probably not what is desired. Parser will use a default
ErrorHandler to print the first 10 errors. Please call
the 'setErrorHandler' method to fix this.
Error: URI=interfaceMsg.xml Line=4:do
cument root element "消息", must matchdo
C
TYPE root "null".
Error: URI=interfaceMsg.xml Line=4:do
cument is invalid: no grammar found.
it is parsed interfaceMsg.xml
 
我的问题是:根据已经存在的行业xml Schema或xml DTD规范,不同的用户生成了不同的xml文件,
我想验证不同用户生成的xml文件是否符合行业xml Schema或xml DTD规范。
采用xml Schema验证xml文件,运行时出现下面错误,是否我的xml schema文件定义有错(经过xml spy的验证)?
或者需要采用DTD文件进行验证?,xml文件和xml schema文件在同一目录下。
运行时出现下面错误:
Error: URI=interfaceMsg.xml Line=4:do
cument root element "消息", must matchdo
C
TYPE root "null".
Error: URI=interfaceMsg.xml Line=4:do
cument is invalid: no grammar found.
下面为测试程序:
import javax.xml.parsers.*;
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class testXML2 {
public static void main(String[] args) {
try{
/*
SAXParser parser;
HandlerBase handler = new HandlerBase();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
parser = factory.newSAXParser();
parser.parse(args[0], handler);

catch (SAXException se) {
// handle error
}
catch (IOException ioe) {
// handle error
}
catch (ParserConfigurationException pce) {
// handle error
}
*/
DocumentBuilder builder;
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
//String location = "http://myserver/mycontent.xml";
try{
builder = factory.newDocumentBuilder();
//builder.setErrorHandler(null);
Documentdo
cument = builder.parse(args[0]);
}
catch (SAXException se)
{
System.out.println("there is error"+se.getMessage());
// handle error.Java API for XML Parsing Version 1.0 17
}
catch (IOException ioe)
{
System.out.println("there is error"+ioe.getMessage());
// handle error
}
catch (ParserConfigurationException pce)
{
System.out.println("there is error"+pce.getMessage());
// handle error
}

System.out.println("it is parsed interfaceMsg.xml");
}
catch(Exception e){
System.out.println("there is error"+e.getMessage());
}

}
}
下面为xml schema文件interfaceMsgSchema.xml
<?xml version="1.0" encoding="GB2312"?>
<!-- edited by wangshm (CATTSoft) -->
<Schema name="interfaceMsgSchema.xml"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="流水号" dt:type="string"/>
<ElementType name="消息类型" dt:type="string"/>
<ElementType name="url" dt:type="uri"/>
<ElementType name="用户名" dt:type="string"/>
<ElementType name="密码" dt:type="string"/>
<ElementType name="回应信息" dt:type="int"/>
<ElementType name="消息">
<element type="消息类型"/>
<element type="流水号"/>
<element type="url"/>
<element type="用户名"/>
<element type="密码"/>
<element type="回应信息"/>
</ElementType>
</Schema>
下面为xml文件interfaceMsg:
<?xml version="1.0" encoding="gb2312"?>
<!-- edited by wangshm (CATTSoft) -->
<!--Sample XML file generated by XML schema-->
<消息 xmlns="x-schema:interfaceMsgSchema.xml">
<消息类型>11</消息类型>
<流水号>11</流水号>
<url>ftp://192.168.141.114:21/root/xml01.xml</url>
<用户名>administrator</用户名>
<密码>cattsoft</密码>
<回应信息>100</回应信息>
</消息>
 
降低要求,大伙能否给出采用DTD文件来进行XML验证的sample呀?
DTD为:
<?xml version="1.0" encoding="gb2312"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by wangshm (CATTSoft) -->
<!--DTD generated by XML Spy v4.3 U (http://www.xmlspy.com)-->
<!ELEMENT url (#PCDATA)>
<!ELEMENT 回应信息 (#PCDATA)>
<!ELEMENT 密码 (#PCDATA)>
<!ELEMENT 流水号 (#PCDATA)>
<!ELEMENT 消息 (消息类型, 流水号, url, 用户名, 密码, 回应信息)>
<!ELEMENT 消息类型 (#PCDATA)>
<!ELEMENT 用户名 (#PCDATA)>
XML为:
<?xml version="1.0" encoding="gb2312"?>
<!-- edited by wangshm (CATTSoft) -->
<!--Sample XML file generated by XML schema-->
<消息 xmlns="x-schema:interfaceMsgSchema.xml">
<消息类型>11</消息类型>
<流水号>11</流水号>
<url>ftp://192.168.141.114:21/root/xml01.xml</url>
<用户名>administrator</用户名>
<密码>cattsoft</密码>
<回应信息>100</回应信息>
</消息>
 
后退
顶部