Java XPath - 检查节点或属性是否存在?

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(351)   2023-07-22 09:14:57

使用 XPath 在给定 XML 内容中检查节点是否存在或在 XML 中检查属性是否存在的 Java 示例。

1、如何判断xml节点是否存在?

要验证节点或标记是否存在于 XML 内容中,您可以针对该 XML 的 DOM 文档执行 xpath 表达式并计算匹配的节点。

  1. matching nodes > zero – 存在 XML 标记/属性。
  2. matching nodes <= zero – XML 标签/属性不存在。

1.1.文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employees>
    <employee id="1">
        <firstName>Lokesh</firstName>
        <lastName>Gupta</lastName>
        <department>
            <id>101</id>
            <name>IT</name>
        </department>
    </employee>
    <employee id="2">
        <firstName>Brian</firstName>
        <lastName>Schultz</lastName>
        <department>
            <id>102</id>
            <name>HR</name>
        </department>
    </employee>
</employees>

1.2.使用 XPath 计算 XML 标记以检查是否存在

package com.cundage.demo;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class XPathExample {
	public static void main(String[] args) throws Exception {
		// Get DOM Node for XML
		String fileName = "employees.xml";
		Document document = getDocument(fileName);

		String xpathExpression = "";

		// Get all employee names
		xpathExpression = "/employees/employee/firstName";
		System.out.println(checkIfNodeExists(document, xpathExpression));	//true
		
		// Get all employee ids
		xpathExpression = "/employees/employee/@id";
		System.out.println(checkIfNodeExists(document, xpathExpression));	//true
		
		// Get all employee age
		xpathExpression = "/employees/employee/@age";
		System.out.println(checkIfNodeExists(document, xpathExpression));	//false

		// Get all department names
		xpathExpression = "/employees/employee/department/name";
		System.out.println(checkIfNodeExists(document, xpathExpression));	//true
		
		// Get department locations
		xpathExpression = "/employees/employee/department/location";
		System.out.println(checkIfNodeExists(document, xpathExpression));	//false
	}

	private static boolean checkIfNodeExists(Document document, String xpathExpression) throws Exception 
	{
		boolean matches = false;
		
		// Create XPathFactory object
		XPathFactory xpathFactory = XPathFactory.newInstance();

		// Create XPath object
		XPath xpath = xpathFactory.newXPath();

		try {
			// Create XPathExpression object
			XPathExpression expr = xpath.compile(xpathExpression);

			// Evaluate expression result on XML document
			NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
			
			if(nodes != null  && nodes.getLength() > 0) {
				matches = true;
			}

		} catch (XPathExpressionException e) {
			e.printStackTrace();
		}
		return matches;
	}
	
	private static Document getDocument(String fileName) throws Exception {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.parse(fileName);
		return doc;
	}	
}

程序输出:

true
true
false
true
false

更多参考:Xpath 示例

快乐学习!!

标签2: Java XML XPath
地址:https://www.cundage.com/article/xpath-check-if-xml-tag-exists.html

相关阅读

Java xpath 示例 读取 XML 文件并解析为 DOM 对象,然后评估 org.w3c.dom.Document 对象上的 xpath 并获得结果以 String 或 NodeList ...
评估字符串的 xpath 并在字符串本身中返回结果 XML 的 Java 示例。 1. XPath 示例——在 xml 字符串上计算 xpath 创建包含 org.xml.sax.InputSo...
很多时候我们需要解析一个 XML 文件并从中提取信息。例如,使用 xpath 读取 XML 元素的属性值。在此 Java XPath 教程中,学习从 XML 字符串获取属性值。 我正在使用 jd...
Java xpath 表达式示例,通过评估这些表达式从 XML 文档中提取信息。我们将学习获取信息以匹配属性值、匹配字段值、contains() 表达式等。 1. XPath 查询示例 1.1....
如何使用 xpath 在 xml 中获取属性值的简单示例在爪哇。我们将学习获取信息以匹配属性值、范围内的属性值、xpath attribute contains() 等等。 1. XPath属性...
使用 XPath 在给定 XML 内容中检查节点是否存在或在 XML 中检查属性是否存在的 Java 示例。 1、如何判断xml节点是否存在? 要验证节点或标记是否存在于 XML 内容中,您可以...
在此 java 示例中,我们将学习使用 NamespaceContext 具有命名空间声明和各自的用法。 命名空间添加了 XML 文件 我创建了 sample.xml 文件并放入类路径中。 &l...
JDOM 解析器 可用于读取 XML、解析 xml 以及在更新 XML 文件内容后写入 XML 文件。它将JDOM2 文档 存储在内存中以读取和修改它的值。 将 XML 文档加载到内存后,JDO...
学习使用 XmlUnit 附带的 XmlAssert 来验证 XML 文档、测试 XPath 表达式并断言 XML 节点或值图书馆。这是使用 XmlAssert 的快速参考。 import st...
读取 XML 文件和打印 XML 字符串以控制或将 XML 写入文件的 Java 示例。 1) 将 XML 转换为字符串 转换 XML 对象即 org.w3c.dom.Document 成字符串...