Rumah >Java >javaTutorial >Bagaimana untuk Menyoal XML dengan Ruang Nama menggunakan XPath dalam Java?

Bagaimana untuk Menyoal XML dengan Ruang Nama menggunakan XPath dalam Java?

Linda Hamilton
Linda Hamiltonasal
2024-11-10 06:10:02396semak imbas

How to Query XML with Namespaces using XPath in Java?

Menyiasat 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.

Pengendalian Ruang Nama Eksplisit

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);

Padanan Elemen Generik dengan Predikat

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);

Padanan Nama Tempatan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn