首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JDOM验证使用xsd验证xml

使用JDOM验证使用xsd验证xml
EN

Stack Overflow用户
提问于 2013-11-22 10:34:26
回答 2查看 2.2K关注 0票数 1

嗨,我正在尝试使用JDOM验证一个使用xsd的xml。这是我的验证代码:-

代码语言:javascript
复制
public class jdom1 {

    public static void main(String[] args) throws JDOMException, IOException {

        // TODO Auto-generated method stub
        File xsdfile = new File("file.xsd");
        XMLReaderJDOMFactory schemafac = new XMLReaderXSDFactory(xsdfile);
        SAXBuilder builder = new SAXBuilder(schemafac);
        Document doc =  builder.build(new File("file.xml"));
        Element root = doc.getRootElement();
        for(Element testCase : root.getChildren()){
            //Code

    }

}

我的file.xml :-

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>


<document>
 <testCaseDataName>
  <id>1</id >
  <testCaseName>Edit</testCaseName >
  <expectedResult>true</expectedResult >

 </testCaseDataName>
 <testCaseDataName>
  <id>2</id >
  <testCaseName>add</testCaseName >
  <expectedResult>false</expectedResult>
  <parameter>
    <key>featues</key >
    <value>w,f</value>
    </parameter>
 </testCaseDataName>

  <testCaseDataName>
  <id>3</id >
  <testCaseName>delete</testCaseName >
  <expectedResult>duplicate</expectedResult>
  <parameter>
    <key>projectType</key >
    <value>new</value>
    <key>Name</key >
    <value>mashnew</value>
    <key>status</key >
    <value>ACTIVE</value>
    <key>canOrder</key >
    <value>Yes</value>
    </parameter>
 </testCaseDataName>
 </document>

我的file.xsd :-

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/ACL"
    xmlns:tns="http://www.example.org/ACL"
    elementFormDefault="qualified">
    <include schemaLocation=""></include>
    <element name="document">
    <complexType>
      <sequence>
    <element name="testCaseDataName">
     <complexType>
      <sequence>
        <element name ="id" type ="ID" ></element>
        <element name ="testCaseName" type ="string" ></element>
        <element name = "expectedResult" type="string"></element>
        <element name = "parameter" minOccurs="0">
        <complexType>
            <sequence>
                <element name="key" type ="string" maxOccurs="1"></element>
                <element name="value" type="string" maxOccurs="unbounded"></element>
            </sequence>
        </complexType>
        </element>
        </sequence>
     </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
</schema>

当我运行这段代码时,我会得到以下错误。有人能帮我解决这个问题吗。

代码语言:javascript
复制
Exception in thread "main" org.jdom2.input.JDOMParseException: Error on line 4 of document file:/C:/Users/file.xml: cvc-elt.1: Cannot find the declaration of element 'document'.
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:228)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
    at com.memoir.client.test.testdb.jdom1.main(jdom1.java:24)
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'document'.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
    ... 4 more
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 10:57:27

这是进行验证的方法,请检查您的代码。

代码语言:javascript
复制
SchemaFactory schemafac =
     SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
     Schema schema = schemafac.newSchema(new File("myschema.xsd"));
     XMLReaderJDOMFactory factory = new XMLReaderSchemaFactory(schema);
     SAXBuilder sb = new SAXBuilder(factory);
     Document doc = sb.build(new File("file.xml"));

在模式下面使用

代码语言:javascript
复制
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="testCaseDataName" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:byte" name="id"/>
              <xs:element type="xs:string" name="testCaseName"/>
              <xs:element type="xs:string" name="expectedResult"/>
              <xs:element name="parameter" minOccurs="0">
                <xs:complexType>
                  <xs:choice maxOccurs="unbounded" minOccurs="0">
                    <xs:element type="xs:string" name="key"/>
                    <xs:element type="xs:string" name="value"/>
                  </xs:choice>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
票数 1
EN

Stack Overflow用户

发布于 2013-11-22 11:14:17

我的模式错了。使用此http://www.freeformatter.com/xsd-generator.html生成模式,验证工作正常。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20142695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档