XML文件如下:<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE addressbook SYSTEM "Address.dtd"  [
<!ENTITY amp "&#38;#38;" >
<!ENTITY apos "&#39;" >
]>
<addressbook>
<contact>
<name>小陈</name>
<address>dongdaji</address>
<city>guangzhou</city>
<state>guangdong</state>
<zip>222222</zip>
<phone>
<voice>222</voice>
<fax>8888888888</fax>
</phone>
<email>[email protected]</email>
<web>http://www.sina.com</web>
<company>avcon</company>
</contact>
<contact>
<name>keri</name>
<address>tt</address>
<city>aa</city>
<state>tt</state>
<zip>222222</zip>
<phone>
<voice>222</voice>
<fax>8888888888</fax>
</phone>
<email>[email protected]</email>
<web>http://www.sina.com</web>
<company>avcon</company>
</contact></addressbook>DTD文件如下:
<!ELEMENT addressbook (contact)+>
<!ELEMENT contact (name,address+,city,state,zip,phone,email,web,company)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT phone (voice,fax?)>
<!ELEMENT voice (#PCDATA)>
<!ELEMENT fax (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT web (#PCDATA)>
<!ELEMENT company (#PCDATA)>

解决方案 »

  1.   

    --------------因為<contact>和<name>之間有空格或控制符,所以當成一個text結點:才會出現#text's value is 解決辦法:繼續使用getElementsByTagName();Node node=document.getElementsByTagName("contact").item(0);
              //其中contact 是根addressbook的子节点 
    Element elContact = (Element)node;
    String name = elContact.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
    String address = .....
    其余均如此操作。
      

  2.   

    import java.util.*;
    import java.io.File;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.DOMBuilder;
    import org.jdom.output.XMLOutputter;
    public class TestXML{
    public static void main (String[] args){
          String path = "";
         try{
                           
               // path = tools.getUAprofPath(filename);
                //filename = path + filename ;
                path = "E:\\technology\\test\\a.xml";
                PrintXML printXML = new PrintXML();
                printXML.getRoot(path);
             
            }catch (Exception e) {
                e.printStackTrace();
            }    
        }
    }class PrintXML{

            public void getRoot(String path){
             try{
                DOMBuilder builder = new DOMBuilder();
                 Document doc = builder.build(new File(path));
                   Element root = doc.getRootElement();
                 getEle(root);
             
            }catch (JDOMException e) {
                e.printStackTrace();
            }      
            }
            
        public void getEle(Element e){
        try{
         for (Iterator i=e.getChildren().iterator(); i.hasNext(); ) {
                Element child = (Element)i.next();
                System.out.println(child.getName()+":"+child.getText());         
                getEle(child);
            }
    }catch(Exception ex){
    ex.printStackTrace();
    }
        }  
        }
    你要先去下载一个jdom的编译器,网上有很多地方可以下载。这个里面没有使用DTD,你可以把xml里面的DTD文件说明去了,然后把path设置成你xml所在的位置,然后运行这个程序。
      

  3.   

    谢谢 qlingw(玲) ,我现在准备按你的意思试试看。
    还希望有其它想法的人帮帮忙,也在这里一并谢过了!
      

  4.   

    我建议你再看看jdom。它里面应该也是支持dtd的