Java-如何通过包含换行符的属性值进行选择

标签 java xpath newline

如何处理 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&#xa;ho\"> </root>"; 

关于Java-如何通过包含换行符的属性值进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628355/

相关文章:

c# - 用换行符将字符串拆分成多个字符串?

c# - 使用带有智能感知的 VB.net 自动完成时防止换行

java - VSCode 错误 : JavaFX runtime components are missing, 并且需要运行此应用程序

java - 如何最好地让 Web 服务使用者能够集成测试事务性 Web 服务?

java - 泰语字符显示??????在jsp中标记文件上传

xml - XQuery 返回错误..?

xml - 为什么简单的 XPATH 不起作用

java - 寻找最短路径(Dijkstra)的方法的实现陷入循环

xml - 复杂的 XML XSLT 查询,如 SQL 连接

java - C/C++ 和 Java 中的字符\n 是否被认为是 LF 或平台相关的?