ibm xml专区中对XPATH的一个好文
ibm xml专区中对XPATH的一个好文,http://www.ibm.com/developerworks/cn/xml/x-xpathjava/
主要小结如下:
1 JDK 1.5中已经自带了很好的import javax.xml.xpath.XPathFactory;
了,用1.5吧
2 核心代码
public XPathEvaluator(String xmlFilename) throws IOException {
try {
// Convert filename into a DOM tree
DocumentBuilderFactory domFactory =
DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
this.domTree = builder.parse(xmlFilename);
} catch (SAXException e) {
throw new IOException("Error in document parsing: " + e.getMessage());
} catch (ParserConfigurationException e) {
throw new IOException("Error in configuring parser: " + e.getMessage());
}
}
public NodeList evaluateXPath(String xpathString) throws IOException {
try {
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
return (NodeList)xpath.evaluate(
xpathString, domTree, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
throw new IOException("Error evaluating XPath: " + e.getMessage());
}
}
public static void main(String[] args) {
try {
if (args.length != 1) {
System.err.println("Usage: java ibm.dw.xpath.XPathEvaluator " +
"[XML filename]");
System.exit(1);
}
XPathEvaluator evaluator = new XPathEvaluator(args[0]);
String xpathString = "//target[@name='init']/property[" +
"starts-with(@name, 'parser')]";
NodeList results = evaluator.evaluateXPath(xpathString);
for (int i=0; i<results.getLength(); i++) {
Node node = results.item(i);
System.out.print("Result: ");
switch (node.getNodeType()) {
case Node.ELEMENT_NODE: System.out.println("Element node named " +
node.getNodeName());
break;
case Node.ATTRIBUTE_NODE: System.out.println(
"Attribute node named " +
node.getNodeName() + " with value '" +
node.getNodeValue() + "'");
break;
case Node.TEXT_NODE: System.out.println("Text: '" +
node.getNodeValue() + "'");
break;
default: System.out.println(node);
}
}
可见其基本步骤为,1 读入一个XML
2 建立DOMTREE,即:
DocumentBuilderFactory domFactory =
DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
this.domTree = builder.parse(xmlFilename);
3 String xpathString = "//target[@name='init']/property[" +
"starts-with(@name, 'parser')]";
NodeList results = evaluator.evaluateXPath(xpathString);
这里向该方法传入xpath.其中evaluatexpath方法的功能为把domtree中用xpath解析后,返回一个nodelist,然后再解析.
4 建立XPATH工厂
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
return (NodeList)xpath.evaluate(
xpathString, domTree, XPathConstants.NODESET);
XPathFactory是一个抽象工厂.
抽象工厂设计模式使得这一种 API 能够支持不同的对象模型,如 DOM、JDOM 和 XOM.
为了选择不同的模型,需要向XPathFactory.newInstance()方法传递标识对象模型的统一资源标识符(URI).
目前只支持DOM.
之后创建xpath对象.
之后应用xpath表达式
其中evaluate() 方法被声明为返回 Object,实际返回什么依赖于 XPath 表达式的结果以及要求的类型
一般来说,XPath与Java的映射关系是:
number 映射为 java.lang.Double
string 映射为 java.lang.String
boolean 映射为 java.lang.Boolean
node-set 映射为 org.w3c.dom.NodeList
在 Java 中计算 XPath 表达式时,第二个参数(XPathConstants常量)指定需要的返回类型.有五种可能,都在 javax.xml.xpath.XPathConstants 类中命名了常量:
XPathConstants.NODESET
XPathConstants.BOOLEAN
XPathConstants.NUMBER
XPathConstants.STRING
XPathConstants.NODE
XPathConstants.NODE提示:
最后一个 XPathConstants.NODE 实际上没有匹配的 XPath 类型.只有知道 XPath 表达式只返回一个节点或者只需要一个节点时才使用它.如果 XPath 表达式返回了多个节点并且指定了 XPathConstants.NODE,则 evaluate() 按照文档顺序返回第一个节点.如果 XPath 表达式选择了一个空集并指定了 XPathConstants.NODE,则 evaluate() 返回 null.
注意:如果不能完成要求的转换,evaluate()将抛出 XPathException
最后,可以转换为DOM的NodeList进行解析.
一个更典型的小例子如下:
DocumentFactory factory=DocumentFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc=builder.parse("src/books.xml");
XpathFactory xpathfactory=XpathFactory.newInstance();
Xpath xpath=xpathfactory.newXpath();
XPathExpression pathExpression = xpath
.compile("//book[author='TEST']/title/text()");
Object result=pathExpression.evalucate(doc,XPathConstants.NODESET);
NodeList nodes=(NodeList)result;
for (i=0;i<=nodes.getLenth();i++)
System.out.println(nodes.item(i).getNodevalue):
ibm xml专区中对XPATH的一个好文相关推荐
- python汇率转换_利用Python中的Xpath实现一个在线汇率转换器
前言 在之前的语法里面,我们记得有一个初识Python之汇率转换篇,在那个程序里面我们发现可以运用一些基础的语法写一个汇率计算,但是学到后面的小伙伴就会发现这个小程序有一定的弊端. 首先,它不可以实时 ...
- 使用OpenXml打开word文档中嵌入的另一个文档
今天在写字处理评分程序的时候遇到一个之前没有经历过的场景:在给定的字处理素材文档文档中嵌入了另一个字处理文档,题目要求既要对素材文档进行修改,也要对嵌入的文档进行格式调整.打开嵌入的文档对于操作者来说 ...
- 在Java中使用xpath对xml解析
个人博客地址:https://www.vastyun.com xpath是一门在xml文档中查找信息的语言.xpath用于在XML文档中通过元素和属性进行导航.它的返回值可能是节点,节点集合,文本, ...
- 通过 .NET Framework 中的 XPath 和 XSLT API 方便地操作 XML 数据
本文假设您熟悉 Visual Basic .NET 下载本文的代码: XPathandXSLT.exe (166KB) 摘要 XPath 是一种正在兴起的通用查询语言.通过 XPath,可以在基于 X ...
- XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML
XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...
- 【项目经验】如果想在mapper.xml文件中的一个标签中写多条sql语句,则需要在jdbc的配置文件中稍做配置
如果想在mapper.xml文件中的一个标签中写多条sql语句,则需要在jdbc的配置文件中稍做配置: url=jdbc:mysql://127.0.0.1:3306/airipo?useUnicod ...
- XML解析中的namespace初探
初学者在解析XML文件的时候最容易遇到的问题恐怕就是XML的namespace了,本文旨在对namespace做一个简要的介绍. namespace的意义无需多说,和C++,C#等高级语言一样,XML ...
- python中xpath用法_Python中的xpath基础使用
前言: XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 含有超过 100 个内建的函数.这些函数用于字符串值.数值.日期和时 ...
- XPath语法 在C#中使用XPath例子与用法
XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: <?xml version="1.0" en ...
最新文章
- “数据科学家”或许不再性感,但“数据团队”的产业化才刚开始 | 专访领英全球数据科学团队负责人...
- Fragment使用小技巧
- oracle元数据存储在表空间,[Oracle] dbms_metadata.get_ddl 的使用方法总结
- pat天梯赛练习 L2-006
- Effective C++ ——让自己习惯C++
- 谈谈我们如何发现 VMware vCenter 的越权 RCE
- 2016 Multi-University Training Contests
- error: ‘nullptr’ was not declared in this scope
- VC知识库BLOG-技术,非技术......
- 解决NintendoSwitch安装SXPro后开机长期蓝屏问题
- 旋转矩阵(Rotate Matrix)的性质分析
- Spring中bean的scop
- 计算机无法登陆账户 让注销,电脑开机出现登陆账户,点了以后就马上注销,怎么处理?...
- matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab
- 美国东北大学计算机专业排名,美国东北大学计算机科学专业解析
- Linux设置支持中文
- UML在需求分析与系统设计中之实战讲解(完整UML图形演示)
- 西南科技大学数据库实验二(Oracle 11g)
- python加油代码_python入门教程NO.5 用python写个自动选择加油站的小程序
- mysql5.6.37驱动_mysql5.6.37安装