Java 我想在xml中搜索和分析特定的节点或元素,并从选择的节点创建新的xml
我想从select节点创建新的Xml文件,但我正在使用dom4j解析和创建新的Xml文件。示例假设Nodes Customer name=Joseph是根元素TRX的子元素,我想显示包含Joseph的整个元素并创建一个新文件Java 我想在xml中搜索和分析特定的节点或元素,并从选择的节点创建新的xml,java,xml,parsing,dom4j,Java,Xml,Parsing,Dom4j,我想从select节点创建新的Xml文件,但我正在使用dom4j解析和创建新的Xml文件。示例假设Nodes Customer name=Joseph是根元素TRX的子元素,我想显示包含Joseph的整个元素并创建一个新文件 enter code here File inputFile = new File("C:\\Users\\db2admin\\Desktop\\S4decs\\tlog01_004.xml"); SAXReader reader = new
enter code here
File inputFile = new File("C:\\Users\\db2admin\\Desktop\\S4decs\\tlog01_004.xml");
SAXReader reader = new SAXReader(true);
reader.setValidation(false);
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Document document = reader.read(inputFile);
document.getRootElement();
document.selectNodes("//TRX[@type]='16'").size();
document.selectNodes("/CUSTOMER").size();
// Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer;
writer = new XMLWriter( System.out, format );
writer.write( document );
} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TRANSACTIONS SYSTEM "tlog.dtd">
<TRANSACTIONS storeid="4" sbs="780030" location="1">
<TRX type="16" term="742" trxnum="143895" saleperson="0" supervisor_id="152332149" storeid="4" sbs="780030" opcode="153135959" date="20160915" endtime="111000">
</TRX>
<TRX type="31" term="742" trxnum="143896" starttime="095720" supervisor_id="152332149" storeid="4" sbs="780030" opcode="153135959" date="20160915" endtime="111001">
<CASHOPER managerid="153135959">
<PAYMENT id="1" amount="3000.00" descr="CASH" tndnumb="1" exchangetndid="0">
</PAYMENT>
</CASHOPER>
<LINKTRX linktype="8" prevstoreid="4" prevxactdate="2016-09-14" prevxacttime="22:58:29" prevtermid="0" prevxactid="7620" prevoperid="0"></LINKTRX>
</TRX>
<TRX type="16" term="743" trxnum="65729" saleperson="0" supervisor_id="153136068" storeid="4" sbs="780030" opcode="152332262" date="20160915" endtime="111219">
</TRX>
在此处输入代码
File inputFile=新文件(“C:\\Users\\db2admin\\Desktop\\S4decs\\tlog01_004.xml”);
SAXReader=新SAXReader(true);
reader.setValidation(false);
reader.setFeature(“http://apache.org/xml/features/nonvalidating/load-external-dtd“,假);
文档=reader.read(inputFile);
document.getRootElement();
document.selectNodes(“//TRX[@type]=“16”).size();
document.selectNodes(“/CUSTOMER”).size();
//将文档打印到System.out
OutputFormat=OutputFormat.createPrettyPrint();
XMLWriter-writer;
writer=新的XMLWriter(System.out,格式);
写作(文件);
}捕获(文档异常){
e、 printStackTrace();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
您应该选择所需的节点,然后将它们附加为另一个元素的子元素,并将此元素作为新文档的根元素。请注意,第一个XPath表达式似乎不正确(可能应该是//TRX[@type=16])
private Document daMethod(Document Document,String xpath)引发异常{
列表节点=document.selectNodes(xpath);
Element newRoot=DocumentHelper.createElement(“TRXS”);
用于(节点:节点){
添加((Node)Node.clone());
}
返回DocumentHelper.createDocument(newRoot);
}
希望有帮助。当我运行此程序时,问题仍然显示整个Xml文件,您没有对文档进行任何更改。创建新文档并将打开文档中的选定节点添加到新文档中。请参阅:谢谢F.Kleini爵士,我只想显示我选择的节点。我该怎么做呢?谢谢你,但是我已经使用了vtd Xml,它比DOM更容易使用,也更灵活
private Document daMethod(Document document, String xpath) throws Exception{
List<Node> nodes = document.selectNodes(xpath);
Element newRoot = DocumentHelper.createElement("TRXS");
for (Node node : nodes) {
newRoot.add((Node)node.clone());
}
return DocumentHelper.createDocument(newRoot);
}