我试图解析文件夹中的一堆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 [^<] *"的标记。
非常感谢任何帮助。
答案 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可以操作的形式返回结果。