`
allenwei
  • 浏览: 88605 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用dom4解析XML并校验schema

阅读更多

解析并不难,schema校验比较麻烦,以下是全部代码

 private Document readXmlFromFile(File file) {
      Document protocolDoc = null;
      SAXReader reader = new SAXReader();
      XMLErrorHandler errorHandler = new XMLErrorHandler();
      SAXParserFactory factory = SAXParserFactory.newInstance();
      System.out.println(file.getAbsolutePath());
      factory.setValidating(true); // 要加入校验一定要写这句
      factory.setNamespaceAware(true);
      try {
         //先读取xml文件,再验证
         protocolDoc = reader.read(file);
         SAXParser parser = factory.newSAXParser();

         parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
               "http://www.w3.org/2001/XMLSchema");
         parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", "file:"
               + this.getClass().getResource("/").getPath().toString() + PROTOCOL_XSD_FILE_NAME);

         SAXValidator validator = new SAXValidator(parser.getXMLReader());

         validator.setErrorHandler(errorHandler);

         validator.validate(protocolDoc);

         XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());

         //如果出错errorHandler会记录所有错误信息
         if (errorHandler.getErrors().hasContent()) {
            System.out.println("faild");
            //利用 dom4j 提供的 XMLWriter 打印出所有错误信息
            writer.write(errorHandler.getErrors());
            logger.error("validate xml schema on File " + file.getAbsolutePath() + " fail.");
            throw new ParseProtocolException("validate xml schema on File " + file.getAbsolutePath() + " fail.");
         }
      } catch (ParserConfigurationException e) {
         logger.error("Read xml From File " + file.getAbsolutePath() + " occur ParserConfigurationException.", e);
         throw new ParseProtocolException("Read xml From File " + file.getAbsolutePath()
               + " occur ParserConfigurationException.", e);
      } catch (SAXException e) {
         logger.error("Read xml From File " + file.getAbsolutePath() + " occur SAXException.", e);
         throw new ParseProtocolException("Read xml From File " + file.getAbsolutePath() + " occur SAXException.", e);
      } catch (UnsupportedEncodingException e) {
         logger.error("Read xml From File " + file.getAbsolutePath() + " occur UnsupportedEncodingException.", e);
         throw new ParseProtocolException("Read xml From File " + file.getAbsolutePath()
               + " occur UnsupportedEncodingException.", e);
      } catch (IOException e) {
         logger.error("Read xml From File " + file.getAbsolutePath() + " occur IOException.", e);
         throw new ParseProtocolException("Read xml From File " + file.getAbsolutePath() + " occur IOException.", e);
      } catch (DocumentException e) {
         logger.error("Read xml From File " + file.getAbsolutePath() + " occur DocumentException.", e);
         throw new ParseProtocolException("Read xml From File " + file.getAbsolutePath() + " occur DocumentException.",
               e);
      }
      return protocolDoc;
   }


      //以下是解析过程
      Document protocolDoc = readXmlFromFile(file);

      //得到根节点
      Element openremoteElement = protocolDoc.getRootElement();
      //遍历下面的子结点
      Iterator<Element> protocolItr = openremoteElement.elementIterator(PROTOCOL_ELEMENT_NAME);
      while (protocolItr.hasNext()) {
         Element protocolElement = protocolItr.next();
         ProtocolDefinition protocolDefinition = new ProtocolDefinition();
         // set protocol name
         // 获取节点中的属性
         protocolDefinition.setName(protocolElement.attributeValue(NAME_ATTR_NAME));

         // parse attr element start
         protocolDefinition.getAttrs().addAll(parseAttributs(protocolElement));
         map.put(protocolDefinition.getName(), protocolDefinition);
      }
      return map;
0
0
分享到:
评论

相关推荐

    XSD使用dom4j校验XML

    接下来,我们来看看如何使用DOM4J来解析和校验XML文档。DOM4J提供了一种简单的方法来加载XML和XSD文件,然后使用Schema类进行校验。以下是一个基本的步骤概述: 1. 加载XSD文件:使用DOM4J的DocumentHelper类的...

    Java通过XML Schema校验XML

    在本例中,作者选择使用DOM4j库来进行XML的解析与校验,并且结合了javax.xml.parsers包中的SAXParser来实现XML与XSD之间的校验。这种方法相对直观且易于理解。 #### 示例代码详解 首先,我们来看一下示例中给出的...

    Schema校验java

    在Java中实现XML Schema校验,我们可以使用Java API for XML Processing (JAXP) 提供的工具,特别是SAX或者DOM解析器。SAX解析器是事件驱动的,它逐行解析XML文档并触发相应的事件,如遇到元素开始、元素结束等,...

    schema校验所需要的jar包

    它支持XML Schema,可以帮助解析和构建XML文档,并进行schema校验。 3. **isorelax-20050913.jar**:ISO RELAX NG是另一种XML模式语言,比XML Schema更灵活,且支持混合内容模型。这个jar包可能是用于验证遵循RELAX...

    xml的JAVA解析与格式定义

    在Java中,处理XML文件有多种方法,包括DOM、SAX、DOM4J和JDOM等解析器。 1. **文档对象模型(DOM)解析**: DOM解析器将整个XML文档加载到内存中,构建一个树形结构,允许开发者通过节点遍历、查找和修改XML数据...

    xmlValidate.rar

    XML文档的结构严谨,为了确保其正确性和有效性,通常会使用XML校验工具来验证XML文档是否符合预定义的XML Schema(XSD)规范。"xmlValidate.rar" 是一个压缩包,包含了XML校验相关的工具和资源,便于用户进行XML报文...

    schema_xml.rar_vc xml

    本文将深入探讨在VC++中如何利用XML Schema(XSD)进行XML文档的校验。 XML Schema是W3C制定的一种标准,用于定义XML文档的结构和数据类型。它为XML文档提供了严格的约束,确保文档符合预设的规则,从而提高数据的...

    XML开发库对比

    TinyXml是一个轻量级的DOM解析库,主要适用于嵌入式系统或对内存使用有严格限制的项目。它不支持XML文档验证,但提供了方便的API来读写XML文档,使得操作XML结构变得直观。 4. XML4C: XML4C是IBM开发的XML解析库...

    操作XML方法大全

    - 验证XML文档:使用XML Schema Definition (XSD) 文件对XML进行校验,确保其符合预定义的规则。 7. **Namespaces**: - 在XML中,命名空间用于区分相同名称的元素和属性,通过前缀和URI(Uniform Resource ...

    xml解析工具-静态分析.rar

    4. **解析器**:XML解析器负责读取XML文档并将其转化为程序可以处理的数据结构。有DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析方式: - **DOM**:将整个XML...

    vtd-xml vtd-xml vtd-xml

    DOM解析器会将整个XML树加载到内存中,占用大量资源;SAX是事件驱动的,适合流式处理,但不支持随机访问。而VTD-XML则兼顾了随机访问和资源效率。 6. **应用场景**:VTD-XML适用于大数据分析、XML文档的索引和搜索...

    xml约束 xml经典之二

    可以使用XML解析器,如Microsoft.XMLDOM(在IE5及以上版本的浏览器中内置),来加载XML文件并进行DTD验证。在JavaScript中,可以通过创建XML文档解析器对象,开启校验,然后加载XML文件,最后检查解析错误来实现这个...

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    JavaWeb开发技术-引入Schema约束.pptx

    这可以通过使用Java API for XML Validation (JAXB) 或者DOM解析器实现。JAXB允许你将XML Schema转换为Java类,这样在反序列化XML时,JAXB会自动进行数据校验。 引入Schema约束的好处包括: - 提高数据准确性:...

    基于Python的DOM质量检查技术研究.zip

    5. **校验Schema**:如果文档需要遵循特定的XML Schema(XSD),可以使用`xmlschema`库来验证文档是否符合规范。例如: ```python from xmlschema import XMLSchema xsd_schema = XMLSchema('schema.xsd') ...

    商业编程-源码-介绍两个 XML 文件操作类.zip

    在解析XML时,可以使用`SchemaFactory`和`Validator`进行校验。 总之,这个压缩包提供的源码涵盖了XML解析的核心技术,包括DOM和SAX解析,以及可能的XML验证。理解并掌握这些知识对于任何商业编程项目都是至关重要...

    C++ xml文件处理介绍

    在.NET框架的类库中,有六个命名空间提供了XML文档处理的支持,包括System::Xml、System::Xml::Schema、System::Xml::Serialization、System::Xml::XPath、System::Xml::Xsl和System::Xml::Reader。这些命名空间中的...

    第135讲phpxml编程②cdata实体字符处理指令dtd快速入门编程校验xml.pdf

    PPT①至PPT⑥分别可能详细介绍了XML和DTD的概念,展示了如何创建XML文档,如何定义和引用DTD,以及如何进行XML校验。这些幻灯片可能包括示例代码、解释和关键概念的图解。 下节课可能会继续深入XML和PHP的结合,...

    XML考试题库大全

    XML 文档可以通过 DTD 或 XML Schema 的校验来确保其合法性。XML 文档的合法性是保证 XML 文档正确性的一个重要方面。 本资源摘要信息涵盖了 XML 技术及应用的相关知识点,包括 XML 文档的结构定义、编程接口、文档...

Global site tag (gtag.js) - Google Analytics