XPath读取xml文件
1.创建解析工厂
2.创建解析器
3.读xml文件,生成w3c.docment对象树
4.创建XPath对象
5.通过路径查找对象
例子:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; public class MyXPathTest { /** * @param args */ public static void main(String[] args) { try { //创建解析工厂 DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); //创建解析器 DocumentBuilder builder=documentBuilderFactory.newDocumentBuilder(); //通过解析器读取文件,生成w3c.dom.Document象树 Document document=builder.parse("conf/55.xml"); //创建XPath对象 XPath xPath=XPathFactory.newInstance().newXPath(); // <Model id="057ea377-e531-422d-a181-3371b42e5bd0"> // <Ref> // <node></node> // <node></node> // </Ref> // <Ref> // <node></node> // <node></node> // </Ref> // </Model> //读取Model中属性id的值 String idPath="/Model/@id"; String id=(String) xPath.evaluate(idPath, document, XPathConstants.STRING); System.out.println("id="+id); // <Model> // <Ref> // <node></node> // <node></node> // </Ref> // <Ref> // <node id="057ea377-e531-422d-a181-3371b42e5bd0" nodetype="DynamicMoleNode"></node> // <node></node> // </Ref> // </Model> String idNodePath="/Model/node[@nodetype='DynamicMoleNode']/@id"; String idNode=(String) xPath.evaluate(idNodePath, document, XPathConstants.STRING); System.out.println("idNode="+idNode); // <Model> // <Ref> // <node></node> // <node></node> // </Ref> // <Ref> // <node id=" nodetype="DynamicMoleNode"> // <node rtf="aaaaaaaa" nodetype="Text" /> // </node> // <node></node> // </Ref> // </Model> String rtfPath="/Model/node[@nodetype='DynamicMoleNode']/node[@nodetype='Text']/@rtf"; String rtf=(String) xPath.evaluate(rtfPath, document, XPathConstants.STRING); System.out.println("rtf="+rtf); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
同一xpath路径下有多个Element对象
String path="/XTextDocument/XElements/Element[@type='XTextBody']/XElements/Element";
NodeList nodeList=(NodeList) xPath.evaluate(path,document, XPathConstants.NODESET); System.out.println("nodeList===="+nodeList.getLength());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?