如何比较两个XML文件一致?

漂落深秋 2005-08-04 03:24:50
两个XML文件分别如下:
a.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE SCHEMA SYSTEM "FJWZFPDKLJK.dtd">
<SCHEMA NAME="FJWZFPDKL" CHSNAME="废旧物资发票抵扣清单" SSSQ="200508" CRC="FJWZFPDKL200508_111111111111111_CRC.XML">
<TAXPAYER SWSBH="111111111111111" NSRMC="456" SBRQ="2005-08-01" RECORDCOUNT="2" CJLX="DKZK" CJRDM="111111111111111" CJRMC="456">
<Records><Record FPDM="100003023200" FPHM="02060130" KPRQ="2005-08-01" XHFSWSBH="222222222222222" XHFSWJG="1431026" FPJE="10000" JSDKSE="1000"/><Record FPDM="100003023200" FPHM="02060131" KPRQ="2005-08-01" XHFSWSBH="222222222222222" XHFSWJG="1431026" FPJE="10000" JSDKSE="1000"/></Records></TAXPAYER>
</SCHEMA>

b.xml:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE SCHEMA SYSTEM "FJWZFPCGLJK.dtd">
<SCHEMA NAME="FJWZFPCGL" CHSNAME="废旧物资发票开具清单" SSSQ="200508" CRC="FJWZFPCGL200508_222222222222222_CRC.XML">
<TAXPAYER SWSBH="222222222222222" NSRMC="654" SBRQ="2005-08-01" RECORDCOUNT="2" CJLX="DKZK" CJRDM="222222222222222" CJRMC="654">
<Records><Record GHFNSRLB="1" FPDM="100003023200" FPHM="02090130" KPRQ="2005-08-01" GHFSWSBH="111111111111111" FPJE="10000"/><Record GHFNSRLB="1" FPDM="100003023200" FPHM="02090131" KPRQ="2005-08-01" GHFSWSBH="111111111111111" FPJE="10000"/></Records></TAXPAYER>
</SCHEMA>

如何比较这两个XML文件属性值一致?
...全文
732 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mail25 2005-08-09
生成一个Schema或者DTD用JAXP比较
最好是Schema了,它还可以规定数据类型
下面是个例子,把你要校验的文件传进去就可以了
--------------------------------------------------------
import java.io.*;
import java.text.*;
import java.util.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class Validate {
private final static String SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
private final static String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
private final static String SCHEMA_SOURCE =
"http://java.sun.com/xml/jaxp/properties/schemaSource";
private static List errors = new Vector();

public static List validate(InputStream xmlfilename, String shemafilename) {
//File input = new File(xmlfilename);
File schema = new File(shemafilename);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
try {
SAXParser parser = factory.newSAXParser();
parser.setProperty(SCHEMA_LANGUAGE, XML_SCHEMA);
parser.setProperty(SCHEMA_SOURCE, schema);
parser.parse(xmlfilename, new SAXErrorPrinter());
}
catch (SAXNotRecognizedException e) {
System.err.println("Unknown property specified:" + e.getMessage());
}
catch (SAXNotSupportedException e) {
System.err.println("Unsupported property specified:"
+ e.getMessage());
}
catch (ParserConfigurationException e) {
System.err.println("Your SAX parser is not JAXP 1.2 compliant1."
+ e.getMessage());
}
catch (SAXException e) {
// e.printStackTrace();
System.err.println("Your SAX parser is not JAXP 1.2 compliant2."
+ e.getMessage());
}
catch (IOException e) {
System.err.println("Your SAX parser is not JAXP 1.2 compliant3."
+ e.getMessage());
}
catch (Exception e) {
System.err.println("Your SAX parser is not JAXP 1.2 compliant."
+ e.getMessage());
}
System.out.println(errors.toString());
return errors;
}

private static class SAXErrorPrinter
extends DefaultHandler {
// private MessageFormat message = new MessageFormat("({1}: {2}, {3}): {3}");
private void print(SAXParseException x) {
String msg = x.getMessage();//this.message.format(new Object[] {x.getSystemId(),
// new Integer(x.getLineNumber()),new Integer(x.getColumnNumber()),
// x.getMessage()});
errors.add(msg);

}

public void warning(SAXParseException x) {
this.print(x);
}

public void error(SAXParseException x) {
this.print(x);
}

public void fatalError(SAXParseException x) throws SAXParseException {
this.print(x);
throw x;
}
}
/*
public static void main(String[] argv) {
validate("test.xml", "test.xsd");
}
*/
}
  • 打赏
  • 举报
回复
Runningboy007 2005-08-09
xmlspy这个软件 好像有比较两个xml的文件功能
你去查一下吧
  • 打赏
  • 举报
回复
Javcs 2005-08-08
XML不熟,做个标记
  • 打赏
  • 举报
回复
漂落深秋 2005-08-08
shang
  • 打赏
  • 举报
回复
漂落深秋 2005-08-08
up and up again
  • 打赏
  • 举报
回复
hcom 2005-08-07
up
  • 打赏
  • 举报
回复
漂落深秋 2005-08-07
up
  • 打赏
  • 举报
回复
漂落深秋 2005-08-06
没有人帮我吗?
  • 打赏
  • 举报
回复
Achilles_KG 2005-08-05
顶,关注!
  • 打赏
  • 举报
回复
漂落深秋 2005-08-05
最好还带上注释,,
  • 打赏
  • 举报
回复
漂落深秋 2005-08-05
能不能再详细一点呢??
  • 打赏
  • 举报
回复
chendequan 2005-08-05
只能简单说了!
你先建立一个Document对象!不同的实现会有不同的建立方法!我这里只举例一种
Document document = DocumentBuildFactory.newStance().newDocumentBuilder.newDocument();
docuemnt.parse("1.xml");
NodeList nodelist1 = document.getElementsByTagName("SCHEMA");
NodeList nodeList2 = document.getElementsByTagName("SCHEMA");

然后通过递归得到节点列表再匹配就可以了!
  • 打赏
  • 举报
回复
漂落深秋 2005-08-05
谁能给源代码???我对XML不熟
  • 打赏
  • 举报
回复
Jamebo 2005-08-04
DOM 太慢了SAX吧
  • 打赏
  • 举报
回复
CrazyBoBo 2005-08-04
查一下帮助文档中的DOM。
  • 打赏
  • 举报
回复
漂落深秋 2005-08-04
怎么做?能给出代码吗?
  • 打赏
  • 举报
回复
漂落深秋 2005-08-04
怎么做?能给出代码吗?
  • 打赏
  • 举报
回复
healer_kx 2005-08-04
读入生成两个树,比较树即可。应该用DOM
  • 打赏
  • 举报
回复
发帖
Java EE

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
帖子事件
创建了帖子
2005-08-04 03:24
社区公告
暂无公告