public static Map<String,String[]> toMap(InputStream inStream) throws DocumentException, IOException{
Map<String,String[]> map=new HashMap<String,String[]>();
  SAXReader reader = new SAXReader();
Document doc = reader.read(inStream,"utf-8");
Element root = doc.getRootElement();
List<Element> es=root.elements();
  HashSet<String> names=new HashSet<String>();
for(Element e:es){
names.add(e.getName());
}
int i=0;
String value;
for(String name:names){
es=root.elements(name);
String[] values=new String[es.size()];
for(Element e:es){
value=e.getText();
values[i++]=value.equals("")?null:value;
}
map.put(name, values);
i=0;
}
        return map;
}上面代码是java解析xml的一个方法 
xml大概类似这样的结构<?xml version="1.0" encoding="UTF-8"?>
<data>
<name>aaa</name>
<age>10</age>
<aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>
<bb>2</bb><bb>3</bb><bb>4</bb>
</data>现在我想求
php的代码 
要求返回如此的数组array(
    'name'=>array('aaa'),
    'age'=>array('10'),
    'aa'=>array('1','2','3','4'),
    'bb'=>array('2','3','4')
);上面的xml是通过ajax.send(xml)过来的
不晓得php有没有
获得inputStream这样类似的方法 
在服务器端应该是一个流文件  
所以解析xml文件的函数的参数也是个流 刚学php 不懂得甚多 恳请前辈指教啊  

解决方案 »

  1.   

    $xml = <<<xml
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
    <name>aaa</name>
    <age>10</age>
    <aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>
    <bb>2</bb><bb>3</bb><bb>4</bb>
    </data>
    xml;
    $obj = simplexml_load_string($xml);
    $arr = array();
    foreach($obj as $v){
    $arr[] = $v;
    }
    echo '<pre>';print_r(get_object_vars($obj));
    /*
    array( 'name'=>array('aaa'), 'age'=>array('10'), 'aa'=>array('1','2','3','4'), 'bb'=>array('2','3','4') ); 
    */
      

  2.   


    $xml = <<<xml
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
    <name>aaa</name>
    <age>10</age>
    <aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>
    <bb>2</bb><bb>3</bb><bb>4</bb>
    </data>
    xml;
    $obj = simplexml_load_string($xml);
    echo '<pre>';print_r(get_object_vars($obj));
      

  3.   


    //xml是通过ajax.send(xml)过来的
    //$s = file_get_contents('php://input');
    $s =<<< XML
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
    <name>aaa</name>
    <age>10</age>
    <aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>
    <bb>2</bb><bb>3</bb><bb>4</bb>
    </data>
    XML;
    $xml = new SimpleXMLElement($s);
    settype($xml, 'array');
    print_r($xml);
    Array
    (
        [name] => aaa
        [age] => 10
        [aa] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 4
            )    [bb] => Array
            (
                [0] => 2
                [1] => 3
                [2] => 4
            ))
      

  4.   

    我晕了,刚我说我咋不管用呢,我弄成了settype object
      

  5.   

    前辈们 
    <<< XML
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
    <name>aaa</name>
    <age>10</age>
    <aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>
    <bb>2</bb><bb>3</bb><bb>4</bb>
    </data>
    XML;
    这样等同于 定义了一个xml的字符串吧 我想要的结果是 这个xml是客户端通过http请求发送过来的 怎么获得这个xml的引用 你们也可以这么理解 就是post了一个字节流 然后在服务器端怎么输出来 然后解析 
    比如客户端脚本
    var xml='<?xml version="1.0" encoding="UTF-8"?>'+
    '<data>'+
    '<name>aaa</name>'+
    '<age>10</age>'+
    '<aa>1</aa><aa>2</aa><aa>3</aa><aa>4</aa>'+
    '<bb>2</bb><bb>3</bb><bb>4</bb>'+
    '</data>';
    XMLHTTP.open('post','xxx.php',true);
    XMLHTTP.onreadystatechange=function(){
    ...
    }
    XMLHTTP.send(xml);在java里可以用request.getInputStream获取这个xml的字节流 
    php里的相应代码是?? 这个是关键地方
      

  6.   

    不是和你说了吗?
    $s = file_get_contents('php://input');