为什么80%的码农都做不了架构师?>>>
Java中操作xml的函数Document.getElementById(String id),是通过指定的id来获取对应的element。但是仅仅定义了正确的schema和对应的xml文件是不够的,返回值仍然是null。因为我们不仅要告诉xml文件我们所用的schema是哪个,还需要告诉Java的parser使用哪个schema来验证,否则parser就没法通过schema来验证xml文件内容,导致Document.getElementById(String id)方法返回null。
为了告诉Java的parser使用哪个schema,需要在调用DocumentBuilderFactory.newDocumentBuilder()之前给DocumentBuilderFactory设置对应的属性。
主要代码如下:
public String getTextById(String id) { String text = null;File xmlFile = new File(this.xml_path); File schemaFile = new File(this.schema_path); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // important factory.setNamespaceAware(true); // you should add this to tell Java to validate the schema factory.setValidating(true);DocumentBuilder parser = null; Document doc = null;try { // important factory.setAttribute(SCHEMA_LANG, XML_SCHEMA); factory.setAttribute(SCHEMA_SOURCE, schemaFile);parser = factory.newDocumentBuilder(); doc = parser.parse(xmlFile); text = doc.getElementById(id).getTextContent(); } catch (Exception e) { System.out.println(e.getMessage()); }return text;
}
现在你就可以根据id获取到xml中的内容了。
参考:http://crumpling-rumblings.blogspot.com/2008/05/java-how-to-make-getelementbyid-work.html