如何处理 XPath 查询中的换行符?
以下失败:
public class XPathWithNewLine {
public static void main(String[] args) {
String xml = "<root text=\"hi\nho\"> </root>";
String xpathStr = "//*[@text='hi\nho']";
NodeList list = eval(xml, xpathStr);
if (list != null && list.getLength() > 0) {
System.out.println(list.item(0).getNodeName());
} else {
System.err.println("Failed!");
}
}
public static NodeList eval(String xml, String xpathStr) {
XPath xpath = XPathFactory.newInstance().newXPath();
InputSource source = new InputSource(new StringReader(xml));
NodeList nodeList = null;
try {
nodeList = (NodeList) xpath.compile(xpathStr).evaluate(source, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return nodeList;
}
}
最佳答案
与元素内容不同,属性值为 normalized 。出于任何 XML 处理的目的,任何空白字符序列(包括“\n”)都会转换为单个 ASCII 空格。因此,实际上,您的 XML 实际上是:
String xml = "<root text=\"hi ho\"> </root>";
另一方面,字符实体没有标准化。因此,如果您将该行更改为此,程序应该可以运行:
String xml = "<root text=\"hi
ho\"> </root>";
关于Java-如何通过包含换行符的属性值进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628355/