如题:dom4j如何获取需要用户名密码认证的XML的内容例如:用dom4j如何获取这个XML的内容,XML的地址为:http://api.9911.com/statuses/friends_timeline.xml?count=10,这个XML需要用户名密码认证的。
补充个问题:如何获取一个节点为“create_at”的内容?用dom4j的哪个类什么方法?
例如: <created_at>Sat Feb 6 13:49:00 +0000 2010</created_at> 
如何只获取 <created_at> 这个节点里的 “Sat Feb 6 13:49:00 +0000 2010” 这个内容?
麻烦各位帮忙解决下。先谢了!!

解决方案 »

  1.   

    这和dom4j没关系,首先你需要获得XML内容,然后用dom4j去解析。
    你可以用urlconnection或apache httpcomponents来获得内容,这些都支持用户身份的验证。
      

  2.   

    例如,
    1. get the contents
    URL url = new URL (urlString);
    String userPassword = theUsername + ":" + thePassword;
    String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
    URLConnection uc = url.openConnection();
    uc.setRequestProperty ("Authorization", "Basic " + encoding);
    InputStream content = (InputStream)uc.getInputStream();
    StringBuffer csb = new StringBuffer();
    BufferedReader in   = new BufferedReader (new InputStreamReader (content));
    String line;
    while ((line = in.readLine()) != null) {
      csb.append(line);
    }
    2. parse the contents use dom4j
    ...
      

  3.   

    db.parse(inputStream对象)
    .getElementsByTagName("created_at").item(0).getFirstChild().getNodeValue();
      

  4.   

    URLConnection uc = url.openConnection(); 这行是错的,我加了强转(URLConnection),没错了.但运行时报错是这一行的错误.我DEBUG调了,也是这一行的.icy_csdn.帮忙解决下.
      

  5.   

    URLConnection uc = url.openConnection(); //这一行不应该有错误
    如果有错误,说明你用的类不是正确的;
    import java.net.URL;
    import java.net.URLConnection;
      

  6.   


    java.io.IOException: Server returned HTTP response code: 401 for URL: http://api.9911.com/statuses/friends_timeline.xml?id=1300009911
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at http.Dom4jDemo.openVXML(Dom4jDemo.java:89)
    at http.DataDemo.testOpenVXML(DataDemo.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    是我用的类错了,刚刚那个错误解决了.现在远行出了这个错误了.
    这一行的错误:InputStream content= (InputStream)uc.getInputStream();
      

  7.   


    public static void openVXML(String urlString ,String userName ,String password) throws Exception {
    URL url=new URL(urlString); 
    String userPassword= userName + ":" + password; 
    String encoding=new sun.misc.BASE64Encoder().encode (userPassword.getBytes()); 
    URLConnection uc= url.openConnection(); 
    uc.setRequestProperty ("Authorization","Basic"+ encoding); 
    InputStream content= (InputStream)uc.getInputStream(); 
    StringBuffer csb=new StringBuffer(); 
    BufferedReader in=new BufferedReader (new InputStreamReader (content)); 
    String line;
    while ((line= in.readLine())!=null) { 
        csb.append(line);
    }
    System.out.println(csb.toString());
    }
            public void testOpenVXML() {
    try {
    Dom4jDemo.openVXML("http://api.9911.com/statuses/friends_timeline.xml?id=1300009911", "[email protected]", "mail123");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    这是代码.
      

  8.   

      got   it  !!!
      

  9.   


    uc.setRequestProperty ("Authorization","Basic"+ encoding); 
    uc.setRequestProperty ("Authorization","Basic "+ encoding); 
    Basic后少一个空格。