作者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/m.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