org.jdom2.xpath.XPath类居然标注过时,无奈之下只能研究api。
发现Use XPathFactory/XPathExpression/XPathBuilder instead.
也就是说jdom应该是将xpath类的功能进行了更加详细的分类。
根据经验进行了一些类的测试,最后得出了读取xml的两种方式。
第一种方式,通过XPathFactory类读取xml
xml文件的内容如下
- <span style="font-size:14px"><?xml version="1.0"?>
- <?xml-stylesheet type="text/xsl" href="test.xsl"?>
- <homepages xmlns:xlink="http://www.w3.org/1999/xlink">
-
- <homepage xlink:type="simple"
- xlink:href="http://www.w3school.com.cn">Visit W3School</homepage>
-
- <homepage xlink:type="simple"
- xlink:href="http://www.w3.org">Visit W3C</homepage>
-
- </homepages></span>
通过SAXBuilder获取document和root
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
建立
XPathFactory类的对象,需要引入jaxen的jar包,我们使用JaxenXPathFactory类来生成XPathFactory
- XPathFactory factory = JaxenXPathFactory.instance();
生产xpath表达式实例对象,并获取结果集
- XPathExpression<Object> objs = factory.compile("//homepages");
-
- List<Object> objList = objs.diagnose(root, false).getResult();
完整代码是
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
-
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Object> objs = factory.compile("//homepages");
-
- List<Object> objList = objs.diagnose(root, false).getResult();
第二种方式,通过XPathBuilder获取xpath表达式的实例对象集合首先来创建一个filter,org.jdom2.filter.Filters中提供给我们了一些过滤器,我们这里选择元素类型的,Filter接口的全名是org.jdom2.filter.Filter
- Filter<Element> filter = Filters.element();
生成XPathBuilder对象
- XPathBuilder<Element> builder = new XPathBuilder<Element>("//homepages", filter);
根据它的compileWith(XPathFactory factory)方法来获取到我们需要的xpath表达式的实例对象集合
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Element> objs = builder.compileWith(factory);
之后的方式就和方法1一样了。完整代码是
- String path = System.getProperty("user.dir") + "\\src\\com\\xml\\file\\test.xml";
-
- SAXBuilder saxBuilder = new SAXBuilder();
-
- Document document = saxBuilder.build(path);
-
- Element root = document.getRootElement();
-
- Filter<Element> filter = Filters.element();
-
- XPathBuilder<Element> builder = new XPathBuilder<Element>("//homepages", filter);
-
- XPathFactory factory = JaxenXPathFactory.instance();
-
- XPathExpression<Element> objs = builder.compileWith(factory);
-
- List<Element> objList = objs.diagnose(root, false).getResult();
获取带有命名空间的xml文件内容
使用XPathBuilder的setNamespace方法声明命名空间,Xpath表达式不需要再写"//",例如
- XPathBuilder<Element> builder = new XPathBuilder<Element>("ci:Teacher", filter);
-
- builder.setNamespace("ci", "http://www.test.cn/tuple");
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。