Rumah >Java >javaTutorial >Bagaimana untuk Menyoal XML dengan Ruang Nama menggunakan XPath dalam Java?
Apabila bekerja dengan XML yang menggunakan ruang nama, pertanyaan XPath yang mengabaikan ruang nama mungkin mengakibatkan padanan yang salah. Dalam senario di mana elemen XML terikat pada ruang nama tertentu, adalah penting untuk mempertimbangkan ruang nama dalam ungkapan XPath.
Pendekatan pilihan adalah untuk mengisytiharkan awalan ruang nama dan secara eksplisit rujuknya dalam pertanyaan XPath anda. Ini meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Contohnya:
NamespaceContext namespaceContext = new NamespaceContext(); namespaceContext.addNamespace("x", "http://schemas.example.com/x"); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); xpath.setNamespaceContext(namespaceContext); NodeList nodes = (NodeList)xpath.evaluate("/x:workbook/x:sheets/x:sheet[1]", doc, XPathConstants.NODESET);
Sebagai alternatif, adalah mungkin untuk membina ungkapan XPath yang secara umum memadankan elemen dan menggunakan predikat untuk menapis hasil berdasarkan nama tempatan dan ruang nama mereka -uri. Walaupun pendekatan ini mungkin bertele-tele, ia membolehkan lebih banyak fleksibiliti:
XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); Item node = (Item)xpath.evaluate("//*[local-name()='workbook' and namespace-uri()='http://schemas.example.com/x']", doc, XPathConstants.NODE);
Sebagai langkah terakhir, anda boleh memadankan elemen berdasarkan nama tempatan semata-mata, mengabaikan ruang nama. Walau bagaimanapun, pendekatan ini menimbulkan risiko memadankan elemen yang salah dalam senario di mana berbilang kosa kata dengan nama tempatan yang serupa terdapat dalam XML:
XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); Item node = (Item)xpath.evaluate("//*[local-name()='workbook']", doc, XPathConstants.NODE);
Atas ialah kandungan terperinci Bagaimana untuk Menyoal XML dengan Ruang Nama menggunakan XPath dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!