作者rexhuang (BlueCancer)
看板java
标题[问题] 无法使用xpath解析的xml内容
时间Mon Nov 16 23:18:06 2020
※问题类别:
javax.xml和org.w3c.dom的使用
※系统环境:
Win 10、Java 8u265、Eclipse Version 2020-09
※状况概述:
我有串xml字串,范例如下
https://jsbin.com/hiwukowaqa/edit?html
我要撷取<entry><key><value>ID</value></key><value>01</value></entry>
抓出ID的值是01
※程式码:
因为无法使用以下这种javax.xml.xpath的方式处理
XPathExpression expression =
xPath.compile("//beans//bean//property[@name='output']");
所以改用org.w3c.dom的方式处理
Element eElement = (Element) nNode;
eElement.getElementsByTagName("entry").item(0).getTextContent());
会抓出ID01,再自己substring处理
虽然可以达到目地,但想请教先进是否有更好的处理方式?
感谢
※错误讯息:
无,只是想知道是否有更好的处理方式?
※补充说明:
无
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.43.7.119 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1605539890.A.9D1.html
1F:→ LZN: eElement.getElementsByTagName("entry").item(0) 11/17 15:25
[entry: null]
2F:→ LZN: .getChildNodes().item(1).getNodeValue() ? 11/17 15:27
null
3F:→ jej: 字串吗?正则表示式是你的好朋友喔 11/17 19:42
4F:→ jej: 方法其实很多 如果你不限制xpath的话 jaxb也可以解决 11/17 19:45
感谢!没用过jaxb,研究看看!
※ 编辑: rexhuang (114.43.7.119 台湾), 11/17/2020 21:46:08
5F:→ LZN: .getChildNodes().item(1).getTextContent() <--这应该就可 11/19 11:01
可以使用!非常感谢您的指导!^^
eElement.getElementsByTagName("entry").item(0).getChildNodes().item(0)
.getTextContent()
=>可以取得ID
eElement.getElementsByTagName("entry").item(0).getChildNodes().item(1)
.getTextContent()
=>可以取得01
※ 编辑: rexhuang (114.43.22.144 台湾), 11/22/2020 19:09:20
6F:推 kentyeh: XPathExpression expr = xpath.compile("//property[@na 02/16 13:39
7F:→ kentyeh: me='output']//key[./value/text()='ID']/following-sib 02/16 13:39
8F:→ kentyeh: ling::value/text()"); 02/16 13:39
9F:→ kentyeh: String value = (String) expr.evaluate(doc, XPathCons 02/16 13:39
10F:→ kentyeh: tants.STRING); 02/16 13:39
11F:→ kentyeh: 如果排列顺序不一定则xpath语法改成"//property[@name=' 02/17 10:12
12F:→ kentyeh: output']//entry[./key/value/text()='ID']/value/text( 02/17 10:12
13F:→ kentyeh: )" 02/17 10:12