1。就用那个土办法吧,好像还好用
2。传输dom对象,把dom对象序列化。

解决方案 »

  1.   

    dom对象序列化?怎么做啊?
      

  2.   

    sd我刚贴了序列化对象的一个例子:http://www.csdn.net/expert/topic/972/972843.xml?temp=.727154
    主  题:  如何通过Socket传输对象?
     
      

  3.   

    呵呵,服务器是java,客户端是delphi,也可以传对象吗?
    传对象到底是个什么概念啊:)
      

  4.   

    serializable是个接口,要自己实现的
    但是问题是dom对想怎么序列化啊
    请给个例子看看:)
      

  5.   

    哈哈,这样的话就不好办,delphi不支持RMI的,这样可以传输对象:
    DELPHI(客户端)-CORBA-IIOP-RMI-JAVA(服务器)
    我没做过,看理论上应该行得通的,不过技术复杂性是有点...
      

  6.   

    诸位的土办法是如何的啊?
    偶是判断有没有child,如果有,就嵌套
    然后加上一些特殊的字符("<",">","\"等等)
    还有回车、空格:)
    看上去好烦啊
    没有更好的办法?:)
      

  7.   

    apache的解析器就有可以把dom对象变成string的类,你可以查一下用法,不用自己写
      

  8.   

    真的吗?jwsp用的不是APACHE的吧:(
    能不能说具体点?
    呵呵,我去查查先:)
      

  9.   

    每个xml解析器都应该有这个功能
      

  10.   

    我在jaxp里面找到了DOMResult,可以将node转成result,但是这个result是直接从object来的,怎么转成outputstream或者string啊:(
    result还有一个实现是resultStream,但是这个有没办法和node关联:(
    那位知道的,请赐教
    SAsura(SAsura) :jaxp用的是apache的解析器,请问你所说的是什么类什么函数?
      

  11.   

    老兄,我一直都用土方法,拜托,你的搞定方法是什么?
    一直等待:[email protected]
      

  12.   

    object.toString
    :)
    明白了吧:)
      

  13.   

    public static byte[] bwritedato(Object data) 
       {
          byte[] bx = new byte[1];
          try 
          {
             ObjectOutputStream fin;
             ByteArrayOutputStream b = new ByteArrayOutputStream();
             fin = new ObjectOutputStream(b);
             fin.writeObject(data);
             fin.flush();
             fin.close();
             fin = null;
             bx = new byte[b.size()];
             bx = b.toByteArray();
          }
          catch(Exception e) 
          {
             log(" bAppending/writing object data error : " + e.toString());
          }
          return bx;
       }   public static Object breaddato(byte[] data) 
       {
          Object bx = new Object();
          try 
          {
             ObjectInputStream fin;
             ByteArrayInputStream b = new ByteArrayInputStream(data);
             fin = new ObjectInputStream(b);
             bx = fin.readObject();
             fin.close();
             fin = null;
          }
          catch(Exception e) 
          {
             log(" bAppending/writing object data error : " + e.toString());
          }
          return bx;
       }
      

  14.   

    xml的生成和解析不要用土方法,原因:
    1。不规范,代码难于维护,不能体现xml的特性
    2。有些字符在xml中要转意,不是手工代码可以轻松实现的
    3。encoding问题通过socket传递xml信息,我有一些经验可以和你分享。
      

  15.   

    路人甲都不知道,楼上的你刚出来混的吧。他是深藏不露的高手啊,原来jsp版的《路人甲FAQ》我可是打印出来慢慢看的哦。
      

  16.   

    chenyuan_tongji(codeguru) 
    你有些经验吗?可否贴出来分享?期待!
      

  17.   

    想请教一下
    路人甲
    为什么我从你那里改过来的这一段东西会错呢?import java.io.*;public class ObjectWriter{  private static byte[] tempByte = new byte[1];
      private static Object object = new Object();  public static void objectToByte(Object oIn,byte[] bOut){
        try{
          bOut = new byte[1];
          ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
          ObjectOutputStream oOut = new ObjectOutputStream(byteOut);
          oOut.writeObject(oIn);
          oOut.flush();
          oOut.close();
          oOut = null;
          bOut = new byte[byteOut.size()];
          bOut = byteOut.toByteArray();
        }catch(IOException ioe){
          System.out.println(ioe.toString());
        }
      }  public static void byteToObject(byte[] bIn,Object oOut){
        
     
        try{
          ByteArrayInputStream byteIn = new ByteArrayInputStream(bIn);
          ObjectInputStream oIn = new ObjectInputStream(byteIn);
          object = oIn.readObject();
          oIn.close();
          oIn = null;
        }catch(IOException ioe){
          System.out.println("IO Wrong here");
          ioe.printStackTrace();
        }catch(ClassNotFoundException cnfe){
          System.out.println("Class Wrong there");
          cnfe.printStackTrace();
        }
      }  private void test1(){
       
        String string1 = "eeeeeeeweqpiaxzc;lvasdkl33336655365**!!!!!!";
        objectToByte(string1,tempByte);
        byteToObject(tempByte,object);
        System.out.println((String)object);
      }  public static void main(String[] args){    ObjectWriter objectOut = new ObjectWriter();
        objectOut.test1();
         }
    }谢谢
      

  18.   

    cxjxue(xuefei):
    我也想贴出来,可是码字要时间啊
      

  19.   

    chenyuan_tongji(codeguru):
    期待你的贴字早点出来另外,我想问一下dom是不是不支持GBK(但支持gb2312),jdom我还没有用过,不知道支不支持GBK?
      

  20.   

    当然支持啊
    你看看我以前做过的程序
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import java.util.*;
    import java.io.*;
    import javax.xml.transform.*;
    import javax.xml.transform.stream.*;
    import javax.xml.transform.dom.*;
    import org.apache.xalan.serialize.Serializer;
    import org.apache.xalan.serialize.SerializerFactory;
    import org.apache.xalan.templates.OutputProperties;
    public class AddRecord4 
    {
    public static void main(String[] args) 
    {

    //System.out.println("Hello World!");
    String name="fancy";
    DocumentBuilder parser;
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try 
    {
    parser = factory.newDocumentBuilder();
    Document doc = parser.parse("user.xml");
    Element newlink=doc.createElement(name);
    doc.getDocumentElement().appendChild(newlink);
    outputDoc(doc);

    }
    catch (Exception e) 
    {
    //to do it 
    }
    } public static void outputDoc (Document doc) 
    {
    DOMSource domSource = new DOMSource (doc);
    //Input. Document is an extended class of Node, and therefore can 
    //be used here.
    DOMResult domResult = new DOMResult();
    // Output.
    try 
    {
    TransformerFactory tf=TransformerFactory.newInstance();
    // Get a TransformerFactory.
    Transformer t=tf.newTransformer ();
    // Make a new Transformer from it
    Properties properties = t.getOutputProperties();   
    properties.setProperty(OutputKeys.ENCODING,"GB2312");
    //properties.setProperty(OutputKeys.METHOD,"html");
    //properties.setProperty(OutputKeys.VERSION,"4.0");
    //properties.setProperty(OutputKeys.INDENT,"no");
      t.setOutputProperties(properties);   
    t.transform(domSource,domResult);
    Serializer serializer = SerializerFactory.getSerializer
                                       (OutputProperties.getDefaultMethodProperties("xml"));
    Properties prop=serializer.getOutputFormat();
    prop.setProperty("encoding","GB2312");
    //prop.list(System.out);
    serializer.setOutputFormat(prop);
    File f = new File ("xuser4.xml");
    FileOutputStream fos=new FileOutputStream(f);
    serializer.setOutputStream(fos);
    serializer.asDOMSerializer().serialize(domResult.getNode());
    }
    catch (Exception tce)
    {
    tce.printStackTrace();
    }
    }
    }
      

  21.   

    呵呵,不懂了,路人甲贴的代码能解决问题?
    对了,是把所有的obj都转成了byte[],但是为什么要这么复杂呢?简直就是重写tostring嘛。呵呵,说了半天,还是没有人能够方便的解决问题阿...
    呵呵,最简单的就是一行:Object.toString()还是不能结贴:(
      

  22.   

    是啊,好久的帖子了还没有结,呵呵我做过的项目有用xml文档作为socket报文的,传递的时候实际上就是string.至于xml的document和string的转换,我用的是xerces解析器和它的serialize功能.不过,最近偶看了一些介绍castor的文章,觉得把报文封装成class形式,用castor做xml的marshalling和unmarshalling工作也不错.不过,这需要socket两端都是java程序.
      

  23.   

    cat_hangzhou(cat)老兄,你说的Object.toString()是哪个Object,是否为DOMResult?我没有用xerces,而是IBM的XML4j。
    我关心的是哪个Object.toString()可以读取xml字符串。谢谢!
      

  24.   

    import org.jdom.output.*
    ..XmlOutputter out = new XmlOutputter(" ", true);String strOut = out.outputString(dom);ref: http://www.jdom.org
      

  25.   

    chenyuan_tongji(codeguru) 呵呵,如果都是JAVA好像不用那么复杂吧:)
    gsh(cool98) :呵呵,你不知道java所有的class都是从object派生出来的吗?tostring是Document
      

  26.   

    cat_hangzhou(cat,当然知道toString函数,但是你告诉我,你使用了那个类的toString。