Как я могу искать имена тегов XML в Java - PullRequest
0 голосов
/ 07 октября 2011

Мне нужно найти конкретный узел XML.Я знаю часть его имени, но не полное имя ... Как я могу получить этот элемент с частью имени?

Я знаю, что его можно решить с помощью xpath, но я не знаю как.Например ...:

<root>
<head/>
<body> <SuperAsdf> hi </SuperAsdf>
</body>
<root/>

Я знаю, что это должен быть тег с "Super", но я не знаю, что это может быть "Asdf", поэтому мне нужно выражение xPath, чтобы найти все тегис "Super".

Кроме того, какая функция поддерживает xpaths в java?

Я использую getElementsByTagName, но я прочитал, что он не может интерпретировать xpath.

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Регулярные выражения были бы излишними для этой цели. Просто используйте выражение XPath, например:

"//*[starts-with(local-name(), 'Super')]"

Относительно функций Java для XPath ... см. код здесь , например, или посмотрите на класс XPathFactory .

0 голосов
/ 09 октября 2011

Вы можете использовать выражение XPath, предложенное LarsH для библиотеки XPathAPI ( javadoc ):

List<Node> nodes =
    XPathAPI.selectListOfNodes(doc, "//*[starts-with(local-name(), 'Super')]")

Если у вас есть XPath-2.0-совместимыйпроцессор (например, Saxon) на вашем пути к классам, JAXP и XPathAPI подберут его и будут использовать для выбора узлов.

(Отказ от ответственности, я автор библиотеки XPathAPI.)

0 голосов
/ 07 октября 2011

XPath 1.0 не поддерживает регулярные выражения, но вы все равно можете сделать что-то вроде this для достижения того, что вы пытаетесь сделать (используя только функции XPath).

Xpath 2.0 поддерживает регулярные выражения с такими функциями, как matches() и replace() (дополнительная информация здесь ).

Регулярное выражение в вашем случае будет выглядеть так:

(Super).*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...