[問題] 無法使用xpath解析的xml內容

看板java作者 (BlueCancer)時間4年前 (2020/11/16 23:18), 4年前編輯推噓1(1012)
留言13則, 3人參與, 4年前最新討論串1/1
※問題類別: 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://www.ptt.cc/bbs/java/M.1605539890.A.9D1.html

11/17 15:25, 4年前 , 1F
eElement.getElementsByTagName("entry").item(0)
11/17 15:25, 1F
[entry: null]

11/17 15:27, 4年前 , 2F
.getChildNodes().item(1).getNodeValue() ?
11/17 15:27, 2F
null

11/17 19:42, 4年前 , 3F
字串嗎?正則表示式是你的好朋友喔
11/17 19:42, 3F

11/17 19:45, 4年前 , 4F
方法其實很多 如果你不限制xpath的話 jaxb也可以解決
11/17 19:45, 4F
感謝!沒用過jaxb,研究看看! ※ 編輯: rexhuang (114.43.7.119 臺灣), 11/17/2020 21:46:08

11/19 11:01, 4年前 , 5F
.getChildNodes().item(1).getTextContent() <--這應該就可
11/19 11:01, 5F
可以使用!非常感謝您的指導!^^ 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

02/16 13:39, 4年前 , 6F
XPathExpression expr = xpath.compile("//property[@na
02/16 13:39, 6F

02/16 13:39, 4年前 , 7F
me='output']//key[./value/text()='ID']/following-sib
02/16 13:39, 7F

02/16 13:39, 4年前 , 8F
ling::value/text()");
02/16 13:39, 8F

02/16 13:39, 4年前 , 9F
String value = (String) expr.evaluate(doc, XPathCons
02/16 13:39, 9F

02/16 13:39, 4年前 , 10F
tants.STRING);
02/16 13:39, 10F

02/17 10:12, 4年前 , 11F
如果排列順序不一定則xpath語法改成"//property[@name='
02/17 10:12, 11F

02/17 10:12, 4年前 , 12F
output']//entry[./key/value/text()='ID']/value/text(
02/17 10:12, 12F

02/17 10:12, 4年前 , 13F
)"
02/17 10:12, 13F
文章代碼(AID): #1VifWodH (java)
文章代碼(AID): #1VifWodH (java)