文档章节

Java调用Document.getElementById方法返回null的解决办法

B
 Bet
发布于 2013/04/07 13:46
字数 259
阅读 452
收藏 0

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

© 著作权归作者所有

B

Bet

粉丝 6
博文 55
码字总数 16352
作品 0
合肥
私信 提问
深入了解android平台的jni---本地多线程调用java代码

一、jni调用java对象 JNI提供的功能之一是在本地代码中使用Java对象。包括:创建一个java类对象和通过函数传递一个java对象。创建一个java类对象,首先需要得到得到使用FindClass/GetObject...

mfcai
2013/07/17
0
0
Android WebView的Js对象注入漏洞解决方案

最近在做一个项目过程中,发现了一个很严重的安全漏洞,这个漏洞是乌云平台(http://www.wooyun.org)报告出来的。 1,使用场景 我们很多时候要使用WebView来展示一个网页,现在很多应用为了...

嘻哈开发者
2014/08/25
0
0
利用 Lambda 表达式实现 Java 中的惰性求值

本文由ImportNew -yizhe 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 Java 中惰性求值的潜能,完全被忽视了(在语言层面上,它仅被用来实现 短路求值 )。更先进的语言,如 Scala,区...

ImportNew
2018/08/20
0
0
ThreadLocal 源码解析

本文将从以下几个方面介绍 前言 栗子 类图 ThreadLocal源码分析 ThreadLocalMap 源码分析 ThreadLocal 可能会导致内存泄漏 前言 ThreadLocal 顾名思义就是在每个线程内部都会存储只有当前线程...

tsmyk0715
2018/10/28
0
0
JDBC基础教程之CallableStatement

概述      CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调...

xiahuawuyu
2012/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos 设置hostname

1、centos 6 hostname配置文件为 /etc/sysconfig/network 内容为 NETWORKING=yesHOSTNAME=test_hostname hostname是Linux系统下的一个内核参数,它保存在 /proc/sys/kernel/hostname 下,但......

燃犀
11分钟前
0
0
openSUSE

opensuse aliyun镜像 sudo zypper addrepo -f https://mirrors.aliyun.com/opensuse/distribution/leap/15.0/repo/oss/ aliyun-Oss sudo zypper addrepo -f https://mirrors.aliyun.com/ope......

李有常
17分钟前
0
0
五月天 知足 [結他chord譜]

詞曲: 阿信 Key:E 4/4 Arranged By Kermit Tam Capo 4 > Play C |C   G  |Am  Em  (怎)麼去(擁)有 (一)道彩(虹)  |F   C |F     G (怎)麼去(擁)抱 (一)夏天的(風) |...

阿锋zxf
23分钟前
1
0
OSChina 周二乱弹 —— 你醒啦?现在你已经是丧尸了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小鱼丁 :分享全仁权的单曲《걱정말아요 그대 (你不要担心)》: 《걱정말아요 그대 (你不要担心)》- 全仁权 手机党少年们想听歌,请使劲儿戳(...

小小编辑
25分钟前
364
7
再一次生产 CPU 高负载排查实践

前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU ...

crossoverJie
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部