在解析和处理XML文档时,按条件筛选节点是最基础也最常用的操作。无论你是做配置文件读取,还是处理接口返回的报文,都可能需要从一堆节点中挑出符合规则的那几个。下面介绍两种主流的筛选方式。

使用XPath按条件筛选节点
XPath提供了一种在XML文档中查找信息的语言。通过方括号中的谓词,可以很方便地写条件。例如,想筛选所有价格大于10的book节点,可以用book[price>10]这样的表达式。
Java示例
下面用Java自带的DOM和XPathAPI演示如何筛选:
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
public class XmlFilter {
public static void main(String[] args) throws Exception {
// 加载XML文档
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse("books.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
// 筛选价格大于10的book节点
NodeList nodes = (NodeList) xpath.evaluate(
"/library/book[price>10]", doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getTextContent());
}
}
}
使用LINQ to XML筛选节点
如果你在.NET环境下工作,LINQ to XML让筛选变得像写SQL一样直观。通过Where方法可以链式表达条件。
C#示例
using System;
using System.Linq;
using System.Xml.Linq;
class Program {
static void Main() {
// 加载XML
XDocument doc = XDocument.Load("books.xml");
// 筛选价格大于10的book
var books = doc.Descendants("book")
.Where(b => (int)b.Element("price") > 10);
foreach (var b in books) {
Console.WriteLine(b.Element("title").Value);
}
}
}
两种方式的对比
| 方式 | 适用场景 | 优点 |
|---|---|---|
| XPath | 跨语言、简单路径查询 | 表达式简洁,被广泛支持 |
| LINQ to XML | .NET项目、复杂逻辑 | 强类型、可组合、易调试 |
小结
XML中按条件筛选节点并不复杂。轻量查询用XPath就够了;在C#等语言中需要更灵活逻辑时,LINQ to XML是更好的选择。理解它们的写法,能让你处理XML效率明显提升。
XMLXPath LINQ_to_XML修改时间:2026-07-27 16:30:27