Я написал код для извлечения разных частей XML-строки с использованием xpath. Вопрос у меня есть, если строка xml была, например
<event>alarm, red, 2</event>
есть ли простой способ с помощью xpath выбрать слово второго слова в строке после первой запятой, так что "красный"? прямо сейчас я использую
String event = xpath.evaluate("/event", doc);
который возвращает "alarm, red, 2"
но все, что я хочу, "red"
. Я знаю, что я мог бы просто принять событие и использовать подстроку, чтобы извлечь "red"
но мне интересно, есть ли способ сделать это, используя xpath, а не подстроку?
код:
String xml = "<event>alarm, red, 2<event>";
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
InputSource source = new InputSource(new StringReader(xml));
Document doc = (Document) xpath.evaluate ("/", source, XPathConstants.NODE);
Если вы используете реализацию XPath 2.0, вы можете использовать tokenize
и использовать регулярное выражение для разделения строки запятой, а затем выбрать второй токен:
tokenize(/event, ',')[2]
Я не думаю, что это возможно, и, вероятно, это не очень хорошая идея, содержимое вашего элемента должно быть атомарным, я бы не смешивал этот синтаксический разбор с Xpath и просто переносил событие с помощью метода утилиты, набивающего первое слово.
tokenize
- это XPath 2.0, поэтому вам нужна реализация, которая его поддерживает, такая как Saxon 9. Посмотрите этот вопрос о настройке Saxon в Java.