【发布时间】:2019-03-11 19:47:34
【问题描述】:
我有一些xml记录如下
<records>
<record>
<name>SK</name>
<age>30</age>
</record>
<record>
<name>KK</name>
<age>10</age>
</record>
<record>
<name>RK</name>
<age>50</age>
</record>
<record>
<name>KB</name>
<age>15</age>
</record>
</records>
我使用 SAX Parser 来验证记录并消除
<records>
<record>
<name>SK</name>
<age>30</age>
</record>
<record>
<name>RK</name>
<age>50</age>
</record>
</records>
我使用递归解析来提取标签和值,并验证年龄>20 的记录。但是,我不知道如何仅将年龄 > 20 的记录复制到另一个文件中。
有人可以帮忙吗?
Java 代码如下
// 从 xml 文件中提取标签
private static void visit(Node node, int level) {
NodeList list = node.getChildNodes();
String nodeName = new String();
String nodeValue = new String();
// System.out.println(list);
for (int i = 0; i < list.getLength(); i++) {
Node childNode = list.item(i);
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
nodeName = childNode.getNodeName().toString();
System.out.println(nodeName);
if (PROPERTY_AGE.equals(nodeName)) {
nodeValue = childNode.getTextContent();
System.out.println(nodeName + " : " + nodeValue.trim());
int age = Integer.parseInt(nodeValue.trim());
if(age>20) {
/*
Here I would need to copy the current xml between <record></record> to another xml file.
How can the entire record be extracted using Java?
*/
}
}
visit(childNode, level + 1);
}
}
}
private static void readXMLFileAnddisplayTags(File inputXMLFile) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DefaultHandler handler = new DefaultHandler();
InputStream inputStream = new FileInputStream(inputXMLFile);
InputSource is = new InputSource(new InputStreamReader(inputStream, "UTF-8"));
is.setEncoding("UTF-8");
Document document = builder.parse(is);
visit(document, 0);
} catch (ParserConfigurationException | SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
【问题讨论】: