解析的工具类继承org.xml.sax.helpers.DefaultHandler,然后覆盖父类的几个方法即可。方法的详细解释可以参照JDK的API文档。
- startDocument() 开始解析XML时被调用,一般可以用来做初始化操作。
- startElement() 解析到某个元素(标签)的开头时(例如<name>)被调用,一般用来判断是否已开始解析某特定元素(标签)。
- endElement() 解析完某个元素(标签)时(例如</name>)被调用,一般在此对某些逻辑标记做重置操作。
- characters() 解析到某个文本元素(例如<name>张三</name>)时被调用,一般在此方法中取值,需要结合startElement()方法中设置的逻辑标志进行判断是否解析到XML文档中特定的位置。
下面是一个实例:
import java.util.ArrayList; import java.util.List; import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class URLPatternSAXParser extends DefaultHandler{ private List<String> urlPatternList; private boolean isSecurityConstraint; private boolean isWebResourceCollection; private boolean isUrlPattern; private final String elementSecurityConstraint = "security-constraint"; private final String elementWebResourceCollection = "web-resource-collection"; private final String elementUrlPattern = "url-pattern"; public List<String> getUrlPatternList() { return urlPatternList; } @Override public void startDocument() throws SAXException { this.urlPatternList = new ArrayList<String>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (elementSecurityConstraint.equals(qName)) { isSecurityConstraint = true; return; } if (isSecurityConstraint && elementWebResourceCollection.equals(qName)) { isWebResourceCollection = true; return; } if (isSecurityConstraint && isWebResourceCollection && elementUrlPattern.equals(qName)) isUrlPattern = true; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (elementSecurityConstraint.equals(qName)) { isSecurityConstraint = false; } if (elementWebResourceCollection.equals(qName)) isWebResourceCollection = false; if (elementUrlPattern.equals(qName)) isUrlPattern = false; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (isSecurityConstraint && isWebResourceCollection && isUrlPattern) { this.urlPatternList.add(new String(ch, start, length)); } } public void parser(File xmlFile) throws SAXException, IOException, ParserConfigurationException { if (xmlFile == null) { throw new IllegalArgumentException( "parameter 'xmlFile' must not null !"); } SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); // 禁止DTD解析,避免因找不到DTD文件导致解析失败。 parser.getXMLReader() .setFeature( "http://apache.org/xml/features/nonvalidating/load-external-dtd", false); try { parser.parse(xmlFile, this); } catch (SAXException e) { System.err.println("Cann't parse " + xmlFile.getAbsolutePath()); throw e; } } }
上面代码中,parser()是主方法,调用完此方法之后,就可以调用getUrlPatternList()方法获取到从web.xml中解析出来的url-pattern节点的值(security-constraint/web-resource-collection/url-pattern)。
另外,取元素的属性值,可以在startElement()方法中用attributes.getValue("<属性名>")获取到。
相关推荐
代码示例中没有给出完整的SAX解析器实现,但通常会包括`SAXParserFactory`创建`SAXParser`,然后使用`parse`方法解析XML文件,并传入自定义的`DefaultHandler`子类实例。 总结: DOM解析器适合对XML文档进行随机...
8. **XML处理**:`javax.xml`包包含了处理XML的类,如DOM、SAX和StAX解析器,以及XPath和XSLT处理器。 9. **Swing组件**:`javax.swing`包提供了用于构建图形用户界面的组件,如按钮、文本框、面板等。 10. **国际...
在Java中,JDK自带的`javax.xml.parsers`和`org.xml.sax`包提供了DOM和SAX的实现,而StAX则包含在`javax.xml.stream`包中。使用这些API,开发者可以轻松地实现XML的在线解析。 例如,使用DOM解析XML文件的简单步骤...
Simple API for XML (SAX) 是一个事件驱动的解析器,它不将整个XML文档加载到内存中,而是通过触发一系列的事件(如开始元素、结束元素等)来解析XML。SAX解析器内存效率高,适用于大文件,但编程接口相对复杂,...
5. **XPath和XSLT支持**:内置了SAX和DOM解析器,以及XPath和XSLT处理器,方便XML数据的处理和转换。 6. **JSR 199:Java编译API**:允许在运行时动态编译Java源代码,为Java应用提供了更大的灵活性。 7. **改进的...
6. **改进的XML处理**:DOM、SAX和StAX解析器性能提升,同时增加了对JAXB 2.0的支持。 7. **改进的JDBC**:JDBC 4.0引入了自动注册驱动、批处理和连接池等功能。 8. **Java数据库连接(JDBC)的改进**:提供了对JDBC...
例如,JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可用于构建和操作DOM树。 2. SAX解析: SAX解析器不将整个文档加载到内存,而是通过事件处理器接口(如`ContentHandler`)...
以Java为例,介绍如何使用DOM和SAX解析XML: 1. **DOM解析**: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); ...
在Java 6.0中,StAX被包含在`javax.xml.stream`包下,可以方便地通过JDK自带的API来使用。例如,以下是一个简单的StAX读取XML文档的示例: ```java import javax.xml.stream.XMLInputFactory; import javax.xml....
在JSP中,我们可以使用JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.transform.TransformerFactory`等类来读取和写入XML文件。以下是一个简单的JSP读取XML文件的例子: ```jsp *,javax.xml....
- **其他选择**:虽然JAXB是JDK自带的工具,但开发者还可以选择其他类似的库,如XMLBeans和Castor,它们提供了类似的功能。 #### 三、理解StAX - **StAX**(Streaming API for XML)是一种新的XML处理API,旨在...
4. **XML处理增强**:更新了DOM和SAX解析器,支持XPath 2.0和XSLT 2.0,提高了XML文档处理的灵活性和效率。 5. **数据库连接池**:JDBC 4.0规范提供了自动的连接池管理,简化了数据库连接的管理,提高了应用的性能...
当新的XML解析器或XSLT处理器比JDK自带的更先进时,可以通过在endorsed目录下放置这些库的JAR来优先使用它们。 综上所述,Xalan系列JAR包提供了一套完整的XML处理解决方案,从解析XML文档,到执行XSLT转换,再到...
5. **XML处理**:更新了DOM、SAX和StAX解析器,增强了XPath和XSLT的支持。 6. **Java Web Start和Applet的改进**:提供更好的安全性和用户体验,以及对JNLP(Java Network Launch Protocol)的增强。 7. **Java...
3. **高性能**: XFire 使用了 StAX(Streaming API for XML)进行 XML 解析,相比 DOM 和 SAX,StAX 提供了更优秀的性能和更低的内存占用。 4. **广泛的协议支持**: XFire 支持 SOAP 1.1 和 1.2,WS-Security,WS-...
解析XML文件通常有三种方式:DOM、SAX 和 StAX。这里以DOM为例,使用jdk自带的`javax.xml.parsers.DocumentBuilderFactory`来进行解析: 1. **导入必要的包**:首先需要导入`javax.xml.parsers`相关的包。 2. **...
Java 6.0强化了对XML的支持,包括DOM、SAX和StAX解析器,以及JAXB用于对象与XML之间的绑定。`javax.xml.transform`包提供了转换XML文档的能力。 总结来说,"JAVA6.0帮助文档"涵盖了Java 6.0的各个方面,从基本语法...
7. **XML处理**:SAX、DOM和JDOM是解析XML文档的API,需了解它们的工作原理和应用场景。 8. **单元测试**:使用JUnit编写测试用例以确保代码质量,理解断言、测试套件和异常测试。 9. **工程管理**:Ant是构建工具...
7. **XML处理**:熟悉SAX、DOM和JDOM等XML解析库,能进行XML文件的读取、修改和生成。 8. **单元测试**:使用JUnit编写测试用例,进行代码自动化测试,确保代码质量。 9. **构建工具**:熟悉ant或maven等构建工具...
10. **XML处理**:了解SAX、DOM等解析方式,掌握一种方法实现XML的解析和生成。 ### 五、单元测试与自动化构建 - **JUnit**:掌握基本的单元测试框架,编写测试用例验证功能的正确性。 - **Ant/Maven**:熟悉构建...