xml解析字符串匹配Java

时间:2016-06-22 04:54:34

标签: java xml

我试图解析文件夹中的一堆xml文件,并返回包含特定表达式的所有标记。以下是我的所作所为,

public class MyDomParser {

    public static void main(String[] args) {
           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            try {
                File folder = new File("C:\\Users\\xmlfolder");

                DocumentBuilder builder = factory.newDocumentBuilder();
                for(File workfile : folder.listFiles()){
                    if(workfile.isFile()){
                        Document doc = builder.parse(workfile);

                        }
                    }
                }


            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }

}

如何遍历每个XML中的所有标记并返回包含表达式" / server [^<] *"的标记。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以创建一个单独的方法,以递归方式遍历当前XML文件中的所有节点,并将匹配的标记添加到节点列表中。

示例

public static void parseTags (Node node, List<Node> list)
{
      NodeList nodeList = node.getChildNodes();
      for (int i = 0; i < nodeList.getLength(); i++)
      {
           Node n = nodeList.item(i);
           if (n.getNodeType() == Node.ELEMENT_NODE)
           {
               String content = n.getTextContent();

               // if the tag content matches your criteria, add it to the list
               if (content.matches("/server[^<]*"))
               {
                   list.add(n);
               }
               parseTags(n, list);
           }
      }
}

您可以在现有代码中调用此方法,如下所示:

// create your list outside the loop like this:
List<Node> list = new ArrayList<Node>();

for(File workfile : folder.listFiles())
{
    if(workfile.isFile())
    {
        Document doc = builder.parse(workfile);

        // call the recursive method here:
        parseTags(doc.getDocumentElement(), list);
    }
}

答案 1 :(得分:0)

这是XQuery的工作。这是一个单行:

collection('file://my-folder/?recurse=yes;select=*.xml')//*[.='/server[^<]*'])

集合URI的语法可能因XQuery实现而异;上述作品与撒克逊人合作。

使用DOM解析每个文件,然后使用DOM界面导航它们在时间和机器性能方面都是非常低效的。

您当然可以从Java调用XQuery,并以Java可以操作的形式返回结果。