java - 使用 Java 中的模式和匹配器搜索字符串中的元素

标签 java xml parsing

我正在尝试使用 Java 中的模式和匹配器搜索字符串中的元素。

我有一个节点变体项目,需要获取这些节点之间的所有字符。 我尝试了下面的正则表达式,但它完全跳过了这一行。 但是,如果我在 Notepad++ 中使用相同的正则表达式进行搜索,我会选择所需的结果。请指教。

<variant-items>((.|\n)*)</variant-items>

下面是我的实现

String patternSourceComponent = "<variant-items>((.|\n)*)</variant-items>";
            String result=this.isMatched(patternSourceComponent, xml);

public String isMatched(String patternSourceComponent,String xml)
    {
    String varientItem="";
    try{    Pattern patternComponent = Pattern.compile(patternSourceComponent);
            Matcher matcherComponent = patternComponent.matcher(xml);

            System.out.println("matcherComponent Find : "+matcherComponent.find());
           while (matcherComponent.find()) {
               varientItem=matcherComponent.group(0).trim();
               System.out.println("varientItem : "+varientItem);
           }   }
            catch (Exception e)
            {
            System.out.println("Exception : "+e);
            }

    return varientItem;
    }

最佳答案

我个人会使用Java DOM检查您的节点。对 XML 使用正则表达式是一场噩梦,任何尝试使用它的代码将来很可能会崩溃。尝试这样的方法来获取“variant-items”节点的字符串内容。

File xmlFile = new File("your_xml.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);

NodeList nList = doc.getElementsByTagName("variant-items");
for (int i = 0; i < nList.getLength(); i++) {
    Node node = nList.item(i);
    System.out.println(node.getNodeValue()); 
}

上面的代码打印 xml 文件中所有“variant-items”节点的值。

如果资源/速度考虑是一个问题(例如当 your_xml.xml 很大时),您最好使用 SAX ,速度更快(代码密集一些)并且不会将 XML 存储在内存中。

关于java - 使用 Java 中的模式和匹配器搜索字符串中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834286/

相关文章:

javascript - 使用 $sce.trustAsHtml 渲染字符串返回未定义

java - 来自 .proto 模式文件或字符串的原型(prototype)描述符

java - 使用 Jenkins 将 Spring Boot WAR 部署到 Tomcat

java - 一次写入一个值

xml - ActionScript 3 从 XML 文件读取值

xml - 无法设计 xsd 架构 - 由于元素名称可变

php - 使用 PHP 将 MySQL 行转换为 XML

c# - 带单引号的 Split 方法

c++ - Jsoncpp 没有正确读取指数

java - 如何避免使用volley下载冗余数据?