java - 在 Java 中使用 XPATH 从 XML 读取正则表达式

标签 java regex xml-parsing

我有一组存储在 XML 文件中的正则表达式,并且有一个必须与这些正则表达式进行匹配的字符串。为了读取正则表达式,我使用 XPath。

我的 xml 文件“ErrorPatterns.xml”如下所示:

<?xml version="1.0" encoding="windows-1252" ?>
<errors>
  <pattern id="1">
    <reg> ERROR:</reg> 
  </pattern>
  <pattern id="2">
    <reg> dog </reg>
  </pattern>

</errors>

我的java代码如下所示:

    String ab = "dog is barking";
    File xmlFile = new File("ErrorPatterns.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder;
    dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(new FileInputStream("ErrorPatterns.xml"));
    XPath xpath = XPathFactory.newInstance().newXPath();
    String expression ="/errors/pattern/reg";
    NodeList nodeList =         (NodeList)xpath.compile(expression).evaluate(doc,XPathConstants.NODESET);
    for (int i = 0; i < nodeList.getLength(); i++) {
         String paaatern=nodeList.item(i).getFirstChild().getNodeValue().toString(); 
         Pattern pattern2 = Pattern.compile(paaatern);
         Matcher m2 = pattern2.matcher(ab);
         if(m2.find())
         {
             System.out.println("Yaay");    
         }
     }

当上面的代码运行时,它退出而不打印“Yaay”。但是,如果不是从 xml 读取表达式,而是直接在模式中给出(如下面的代码所示),则它会打印“Yaay”

NodeList nodeList =              (NodeList)xpath.compile(expression).evaluate(doc,XPathConstants.NODESET);
            for (int i = 0; i < nodeList.getLength(); i++) { 
                 Pattern pattern2 = Pattern.compile("dog");
                 Matcher m2 = pattern2.matcher(ab);
                 if(m2.find())
                 {
                     System.out.println("Yaay");    
                 }
             }

但是我从 ErrorPatterns.xml 中读取正则表达式并在项目中使用它们,这是不恰当的。请指导如何操作。

谢谢

最佳答案

您的问题是 XML 中的额外空格。特别是,文件中包含的正则表达式是“ERROR:”和“dog”(注意空格),而不是您可能期望的“ERROR:”和“dog”。

因此,dog 正则表达式(匹配一个空格,后跟“dog”,后跟一个空格)与您的测试字符串不匹配,因为它在单词“dog”之前不包含空格。

从 XML 文件中删除多余的空格,或者将测试字符串更改为以下内容(例如):

String ab = " dog is barking"; // Note the extra space at the front

关于java - 在 Java 中使用 XPATH 从 XML 读取正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202690/

相关文章:

java - 如何使用正则表达式从 cucumber 特征文件中提取特定场景

javascript - 使用正则表达式修改xml文件

regex - 使用补码运算形式化正则表达式

java - 用于 Java 的小型、简约和快速的 XML 库?

java - org.eclipse.swt.browser.XULRunnerPath 不影响使用的浏览器

java - Eclipse Java Oxygen 未启动

java - XMLStreamReader 跳过没有属性的元素

PHP 的 SimpleXML 不保持不同元素类型之间的顺序

java - Eclipse Java 应用程序 : Returning exit code\= 0 opens unwanted window

java - 使用 clojure 通过 java 互操作从数据集对象调用 groupBy 方法