以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  hasFeature("Traversal","2.0") is false 问题(在线等)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=12791)


--  作者:paopao1
--  发布时间:12/15/2004 5:12:00 PM

--  hasFeature("Traversal","2.0") is false 问题(在线等)
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import org.w3c.dom.Document;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.TreeWalker;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Element;

public class ShowDocument {
 public static void main(String args[]) {
  File docFile = new File("employees.xml");
  Document doc = null;
  try {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   DocumentBuilder db = dbf.newDocumentBuilder();
   doc = db.parse(docFile);
  } catch (Exception e) {
   System.out.print("Problem parsing the file.");
  }
  DOMImplementation domimpl = doc.getImplementation();
  if (domimpl.hasFeature("Traversal","2.0")) {
   Node root = doc.getDocumentElement();
   int whattoshow = NodeFilter.SHOW_ALL;
   NodeFilter nodefilter = null;
   boolean expandreferences = false;
   DocumentTraversal traversal = (DocumentTraversal) doc;
   TreeWalker walker = traversal.createTreeWalker(root, whattoshow,
     nodefilter, expandreferences);
   Node thisNode = null;
   thisNode = walker.nextNode();
   while (thisNode != null) {
    if (thisNode.getNodeType() == thisNode.ELEMENT_NODE) {
     System.out.print(thisNode.getNodeName() + " ");
     Element thisElement = (Element) thisNode;
     NamedNodeMap attributes = thisElement.getAttributes();
     System.out.print("(");
     for (int i = 0; i < attributes.getLength(); i++) {
      System.out.print(attributes.item(i).getNodeName()
        + "=\"" + attributes.item(i).getNodeValue()
        + "\" ");
     }
     System.out.print(") : ");
    } else if (thisNode.getNodeType() == thisNode.TEXT_NODE) {
     System.out.print(thisNode.getNodeValue());
    }
    thisNode = walker.nextNode();
   }
  } else {
   System.out.println("The Traversal module isn't supported.");
  }
 }
}


系统输出:The Traversal module isn't supported.
employees.xml与class在同级目录中
是不是 环境的问题呀?
谢谢


--  作者:wxb_nudt
--  发布时间:12/15/2004 6:31:00 PM

--  
首先指出两个语法错误,43和48行的getNodevalue()方法应该是getNodeValue()
继续看!
--  作者:wxb_nudt
--  发布时间:12/15/2004 6:34:00 PM

--  
没有什么问题啊,我试过了,我使用的xml文件是自己写的一个employees.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE personnel SYSTEM "personal.dtd">
<personnel>
 <person id="Big.Boss">
  <name>
   <family>Boss</family>
   <given>Big</given>
  </name>
  <email>chief@foo.com</email>
  <link subordinates="one.worker two.worker three.worker four.worker five.worker"/>
 </person>
 <person id="one.worker">
  <name>
   <family>Worker</family>
   <given>One</given>
  </name>
  <email>one@foo.com</email>
  <link manager="Big.Boss"/>
 </person>
 <person id="two.worker">
  <name>
   <family>Worker</family>
   <given>Two</given>
  </name>
  <email>two@foo.com</email>
  <link manager="Big.Boss"/>
 </person>
 <person id="three.worker">
  <name>
   <family>Worker</family>
   <given>Three</given>
  </name>
  <email>three@foo.com</email>
  <link manager="Big.Boss"/>
 </person>
 <person id="four.worker">
  <name>
   <family>Worker</family>
   <given>Four</given>
  </name>
  <email>four@foo.com</email>
  <link manager="Big.Boss"/>
 </person>
 <person id="five.worker">
  <name>
   <family>Worker</family>
   <given>Five</given>
  </name>
  <email>five@foo.com</email>
  <link manager="Big.Boss"/>
 </person>
</personnel>

屏幕输出如下:
E:\CodeAndFile\XML\DOMSAX>java ShowDocument


  person (contr="false" id="Big.Boss" ) :
    name () : family () : Boss given () : Big
    email () : chief@foo.com
    link (subordinates="one.worker two.worker three.worker four.worker five.work
er" ) :


  person (contr="false" id="one.worker" ) :
    name () : family () : Worker given () : One
    email () : one@foo.com
    link (manager="Big.Boss" ) :


  person (contr="false" id="two.worker" ) :
    name () : family () : Worker given () : Two
    email () : two@foo.com
    link (manager="Big.Boss" ) :


  person (contr="false" id="three.worker" ) :
    name () : family () : Worker given () : Three
    email () : three@foo.com
    link (manager="Big.Boss" ) :


  person (contr="false" id="four.worker" ) :
    name () : family () : Worker given () : Four
    email () : four@foo.com
    link (manager="Big.Boss" ) :


  person (contr="false" id="five.worker" ) :
    name () : family () : Worker given () : Five
    email () : five@foo.com
    link (manager="Big.Boss" ) :

E:\CodeAndFile\XML\DOMSAX>



--  作者:paopao1
--  发布时间:12/15/2004 9:26:00 PM

--  
我使用的编译器是eclipse
jdk1.4.2
使用dom是不是还需要配置其他的环境
输出的信息好像是提示系统不支持解析xml
谢谢
--  作者:wxb_nudt
--  发布时间:12/15/2004 10:19:00 PM

--  
我使用是j2sdk1.4.2,加xerces-2_6_2
你是不是没有xerces或者其他dom的解析器,只是用jdk里面的dom解析器啊?

--  作者:paopao1
--  发布时间:12/16/2004 8:25:00 AM

--  
以下是引用wxb_nudt在2004-12-15 22:19:33的发言:
我使用是j2sdk1.4.2,加xerces-2_6_2
你是不是没有xerces或者其他dom的解析器,只是用jdk里面的dom解析器啊?



谢谢你的解答,果然是没有dom解析期的问题

感谢以上各层的解答,谢谢!!!


--  作者:wxb_nudt
--  发布时间:12/16/2004 1:14:00 PM

--  
我又猜对了,哈哈!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms