Какой простой способ в java оценить xpath в строке и вернуть строку результата
Простой ответ на простой вопрос.
Например:
String xml = "<car><manufacturer>toyota</manufacturer></car>";
String xpath = "/car/manufacturer";
assertEquals("toyota",evaluate(xml, xpath));
Как я могу написать метод оценки простым и понятным способом, который будет работать для любого заданного корректного xml и xpath.
Очевидно, что это может быть достигнуто, но большинство кажется очень многословным.
Любые простые способы, которых я не вижу/библиотеки, которые могут это сделать?
В случаях, когда возвращаются несколько узлов, я просто хочу, чтобы это было строковое представление.
Ответы
Ответ 1
Здесь вы можете сделать следующее с Java SE:
import java.io.StringReader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.xml.sax.InputSource;
public class Demo {
public static void main(String[] args) throws Exception {
String xml = "<car><manufacturer>toyota</manufacturer></car>";
String xpath = "/car/manufacturer";
XPath xPath = XPathFactory.newInstance().newXPath();
assertEquals("toyota",xPath.evaluate(xpath, new InputSource(new StringReader(xml))));
}
}
Ответ 2
В этом случае библиотека XMLUnit может быть идеально подходит:
http://xmlunit.sourceforge.net/userguide/html/index.html#Xpath%20Tests
Он предоставляет некоторые дополнительные методы assert.
Например:
assertXpathEvaluatesTo("toyota", "/car/manufacturer",
"<car><manufacturer>toyota</manufacturer></car>");
Ответ 3
Использование класса Xml из https://github.com/guppy4j/libraries/tree/master/messaging-impl:
Xml xml = new Xml("<car><manufacturer>toyota</manufacturer></car>");
assertEquals("toyota", xml.get("/car/manufacturer"));