我在API里看了一下Document(org.w3c.dom.Document)发现它是继承Node,而Node下的各个接口(interface)有对应的节点名称(nodeName)、节点值(nodeValue)以及属性(attributes)。
而Document对应的节点名称为"#document",其节点值得到的最终还是null,属性为null。
如果只是将代码中Document的对象直接输出,那么会显示对应的名称以及对应的值。
注:原本调用System.out.println()方法应该是输出Object类中的toString()方法定义的:
getClass().getName() + '@' + Integer.toHexString(hashCode())
但是这里输出的:
[#document: null]
应该是某个父类(估计是NodeImpl类或者其他某个类)中重写的toString()方法
public String toString() {
return "[" + getNodeName() + ": " + getNodeValue() + "]";
}
抱歉,以查明原因了,是xml文件的问题
老项目,webservice可能会用到
写成UTF8就行
你把try。。catch里的e.printstra....方法里的内容改写一下,看看是哪里出了问题
是 xml dom中的节点集合。没有定义也可以使用,因为是dom下自带的。在DOM中有三个特别的集合分别是NodeList(节点的集合),NamedNodeMap(元素属性的集合)和HTMLCollection(html元素的集合)。这三个集合有一些共同的特点:它们都可以通过中括号表达式来访问集合中元素,也有length属性。但它们并不是数组,而且它们都是动态的,会根据页面元素的变化而变化。
看位置啊 ,例子中的id不是在book节点里面吗
这个orc.w3c.dom的包,是DOM里面常用的包,就是你Import时候的包。
你想知道怎么选的他,你去类名上面,你会看到很多 如 import java.io.BufferedReader;这样的,你进去找,是否有orc.w3c.dom这个包。如果引错了,同样的,也是在这里找,把你引错的那行import删掉就好了。
xml文件保存的时候编码改成UTF-8试试
应该是说错了
这个应该是让你安装XML打开方式的插件,安装一个就好了https://zhidao.baidu.com/question/579963982.html
姐姐阿姨都不介意,声音好听就行!hhh.
鼠标放上去就会显示,是否正确导入jar
你去开源网站上去找,很多项目例子
一个标签可以有多个属性。id属性是其中的一种,是用来标记这个标签,就像身份证号码一样,是唯一的。所以会说有且只有一个id属性。
用的时候通过类,查找API文档
append追加节点
用记事本打开你的book.xml文件,然后另存为,选项选择UTF-8
你要把你那个xml文件第一行改一下,?和xml不能中间出现空格,我之前也是这个样子。
因为你看到的那个只是个接口,具体的实现你是看不到的。
/** *解析XML文件 */ public void parserXML(){ //通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下 try { // <至此!已关联需要解析的XML文件> Document document = getDocumentBuilder().parse("books2.xml"); //获取book名节点的所有List列表 NodeList bookList = document.getElementsByTagName("book"); //获取book节点的数量,并输出 System.out.println("book节点的数量:" + bookList.getLength()); //循环遍历每一个book节点的属性以及子节点 for(int i = 0 ; i < bookList.getLength() ; i++ ){ //提示输出正在遍历的第几本书 System.out.println("**********开始遍历第" + (i + 1) + "本书**********"); //通过 item(i)方法 获取一个book节点,nodeList的索引值从0开始 Node book = bookList.item(i); //获取book节点的所有属性集合 NamedNodeMap attrs = book.getAttributes(); //在不知道book节点有几个属性时使用attrs.getLength()获得长度 for (int j = 0 ; j < attrs.getLength() ; j++ ){ Node attr = attrs.item(j); System.out.println("booK的属性名:" + attr.getNodeName() + "_____属性值:" + attr.getNodeValue()); } //获取book节点子节点的List集合 NodeList childNodes = book.getChildNodes(); //输出book子节点集合的长度 System.out.println("childNodes:" + childNodes.getLength()); //遍历book子节点 for(int k = 0 ; k < childNodes.getLength() ; k ++){ //获取book子节点 Node child = childNodes.item(k); //获取book子节点的属性集合 NamedNodeMap atts = child.getAttributes(); //遍历该book子节点的属性集合 for (int j = 0 ; j < atts.getLength() ; j++ ){ Node attr = atts.item(j); // System.out.println("子节点的属性名:" + attr.getNodeName() + "_____属性值:" + attr.getNodeValue()); } if(child.getNodeType() == Node.ELEMENT_NODE){ System.out.println(child.getNodeName() + ": " + child.getTextContent()); } } //提示遍历结束 System.out.println("**********结束遍历第" + (i + 1) + "本书**********"); } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
关于xml文件里的文字无法显示,你看下文件保存时的编码格式是什么,如果不是utf-8,就改成utf-8编码模式,或者是你eclipse项目的编码格式不是utf-8编码模式,改正即可,排除以上之后就是你代码估计哪里调用错了,重新核对一下。还有你说的错误提示,我英文不好能力有限暂时看不出是哪个地方出了异常
还有你的xml文件也贴出来
对于你要解析的xml文件,节点类型就是固定的,但是对于你在编写的xml文件,节点类型可以改变。
节点类型如下:
<book id = "1">一本书</book>
<book></book>是Element
id = "1"是Attribute
“一本书”是Text
你student里面都没有属性值,attrs.getLength当然是0啊,
1.可以在不同应用程序之间的通信。
2.可以在不同平台之间的通信。
3.可以在不同平台之间的数据共享。
那为什么老师的就没有出现那种情况?
你用什么软件写的?普通文件编辑保存的时候可以命名字符编码格式;一般选utf-8;或者查看一下编码;修改为和myEclipse项目编码相同的应该就可以了.我在项目中创建xml文件就没问题