JDOM2.0.5版本通过xpath读取xml或读取带有命名空间的xml
2013-11-04 17:12
561 查看
org.jdom2.xpath.XPath类居然标注过时,无奈之下只能研究api。
发现Use XPathFactory/XPathExpression/XPathBuilder
instead.
也就是说jdom应该是将xpath类的功能进行了更加详细的分类。
根据经验进行了一些类的测试,最后得出了读取xml的两种方式。
第一种方式,通过XPathFactory类读取xml
xml文件的内容如下
通过SAXBuilder获取document和root
建立XPathFactory类的对象,需要引入jaxen的jar包,我们使用JaxenXPathFactory类来生成XPathFactory
生产xpath表达式实例对象,并获取结果集
完整代码是
第二种方式,通过XPathBuilder获取xpath表达式的实例对象集合
首先来创建一个filter,org.jdom2.filter.Filters中提供给我们了一些过滤器,我们这里选择元素类型的,Filter接口的全名是org.jdom2.filter.Filter
生成XPathBuilder对象
根据它的compileWith(XPathFactory factory)方法来获取到我们需要的xpath表达式的实例对象集合
之后的方式就和方法1一样了。
完整代码是
获取带有命名空间的xml文件内容
使用XPathBuilder的setNamespace方法声明命名空间,Xpath表达式不需要再写"//",例如
发现Use XPathFactory/XPathExpression/XPathBuilder
instead.
也就是说jdom应该是将xpath类的功能进行了更加详细的分类。
根据经验进行了一些类的测试,最后得出了读取xml的两种方式。
第一种方式,通过XPathFactory类读取xml
xml文件的内容如下
<?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>
通过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");
相关文章推荐
- 读取带有Xmlns命名空间的XML文件
- c# 读取带有命名空间的XML
- C#读取写入带有命名空间的XML文件
- XML中处理带有命名空间的XPath查询
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- Xpath dom4j解析带有命名空间的XML的方法
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- 使用XPath查询带有命名空间(有xmlns)的XML
- 使用XPath查询带有命名空间(有xmlns)的XML(转)
- dom4j中通过xpath处理带命名空间的XML文件
- XML 命名空间以及它们如何影响 XPath 和 XSLT (Extreme XML)
- 读取含有命名空间xml文件内容
- 通过xpath读取xml节点
- C# 读取带xmlns 命名空间的XML
- 通过JDom读取XML文件
- XML 命名空间(XML Namespaces)介绍以及节点读取方法
- Dom4j解析带有命名空间的XML文件
- dom4j中通过xpath处理带命名空间的XML文件
- 读取带命名空间的Xml文档的方法备忘
- XML——c#读取带命名空间的xml