使用Java中的Pattern和matcher搜索字符串中的元素

时间:2014-02-17 16:27:38

标签: java xml parsing

我正在尝试使用Java中的Pattern和matcher搜索字符串中的元素。

我有一个节点变量项,需要获取这些节点之间的所有字符。 我尝试了下面的正则表达式,但它完全跳过了这一行。 但是,如果我在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;
    }

1 个答案:

答案 0 :(得分:1)

我个人会使用Java DOM来检查您的节点。使用正则表达式进行XML是一场噩梦,任何尝试它的代码都很有可能在未来中断。尝试这样的方法来获取“变体”项目的字符串内容。节点

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()); 
}

以上代码打印所有&#39;变体项目的值&#39; xml文件中的节点。

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