java xpath XML解析

java xpath XML解析,java,xml,xpath,xml-parsing,string-parsing,Java,Xml,Xpath,Xml Parsing,String Parsing,我编写了一些代码,使用xpath从XML字符串中提取数据的不同部分。我的问题是,xml字符串是否是示例 <event>alarm, red, 2</event> 它返回“报警,红色,2”,但我只想要“红色”。我知道我可以在那个时获取事件并使用子字符串来提取“red”,但我想知道是否有一种方法可以使用xpath而不是子字符串来实现这一点 代码: String xml=“警报,红色,2”; XPathFactory XPathFactory=XPathFactory.new

我编写了一些代码,使用xpath从XML字符串中提取数据的不同部分。我的问题是,xml字符串是否是示例

<event>alarm, red, 2</event>
它返回
“报警,红色,2”
,但我只想要
“红色”
。我知道我可以在那个时获取事件并使用子字符串来提取
“red”
,但我想知道是否有一种方法可以使用xpath而不是子字符串来实现这一点

代码:

String xml=“警报,红色,2”;
XPathFactory XPathFactory=XPathFactory.newInstance();
XPath=xpathFactory.newXPath();
InputSource=新的InputSource(新的StringReader(xml));
Document doc=(Document)xpath.evaluate(“/”,源,XPathConstants.NODE);

我认为这是不可能的&这样做可能不是一个好主意,元素的内容应该是原子的,我会避免将这种解析与Xpath混合在一起,而只是用一个实用方法包装事件,在第一个单词上加上修饰。

如果使用Xpath 2.0实现,您可以使用
tokenize
并使用正则表达式以逗号分隔字符串,然后选择第二个标记:

tokenize(/event, ',')[2]

令人惊叹的!我将如何在代码中实现这一点?类似字符串event=xpath.evaluate(“/event”,doc).tokenize(/event,'2')[2]
tokenize
是XPath2.0,因此您需要一个支持它的实现,比如Saxon 9。请参阅关于在Java中设置Saxon。
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);
tokenize(/event, ',')[2]