XML是一个SOAP, 内容如下:<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body><ACIC_MessageBrokerService xmlns="http://www.ACIC.MessageBrokerService.com/">
<ServiceID>0428000001</ServiceID>
<obj>
  <anyType xsi:type="xsd:string">par1</anyType>
  <anyType xsi:type="xsd:int">0</anyType>
  <anyType xsi:type="xsd:boolean">true</anyType>
</obj></ACIC_MessageBrokerService>
</soap:Body>
</soap:Envelope>
请高手帮忙帮我取出 ServiceID 的值放进一个String变量, 和 obj 中的值, 放进一个Object[] 中, 万分感谢....

解决方案 »

  1.   

    http://www.ibm.com/developerworks/cn/xml/x-dom4j.html
    百度搜了一下。。一大堆啊。上面是我看了一下很详细
      

  2.   

    我那个SOAP, 带名称空间的...怎么取出里面的 <ServiceID> 和<obj> 节点呢?
      

  3.   

    没啥特殊区别啊,你没试试看么?
            String str = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                    + "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
                    + "<soap:Body><ACIC_MessageBrokerService xmlns=\"http://www.ACIC.MessageBrokerService.com/\">"
                    + "<ServiceID>0428000001</ServiceID>" + "<obj>" + "<anyType xsi:type=\"xsd:string\">par1</anyType>"
                    + "<anyType xsi:type=\"xsd:int\">0</anyType>" + "<anyType xsi:type=\"xsd:boolean\">true</anyType>"
                    + "</obj></ACIC_MessageBrokerService>" + "</soap:Body>" + "</soap:Envelope>";
            Document doc = DocumentHelper.parseText(str);
            Element root = doc.getRootElement();
            System.out.println(root);
            Element node = root.element("Body").element("ACIC_MessageBrokerService").element("ServiceID");
            System.out.println(node.getName() + ": " + node.getText());
      

  4.   

    对了,如果你喜欢用XPath的话,可能要让你失望了:Element node = doc.selectSingleNode("//*[local-name()='ServiceID' and namespace-uri()='http://www.ACIC.MessageBrokerService.com/']");
      

  5.   


    太感谢了, ServiceID的值已经获取到了, 但是我在获取obj数组的时候, 又出问题了, 请再帮忙看看, 我的代码写的是
    Element node = root.element("Body").element("ACIC_MessageBrokerService").element("obj");
    执行时就抛异常了.
      

  6.   

    不会啊,我试验的挺好的,你是不是变量重名了?
            Element obj = root.element("Body").element("ACIC_MessageBrokerService").element("obj");
            List<Element> types = obj.elements("anyType");
            for (Element elem : types) {
                System.out.println(elem.getName() + ": " + elem.getText());
            }
    XPath也行:        List<Element> lstType = doc.selectNodes("//*[local-name()='anyType' and namespace-uri()='http://www.ACIC.MessageBrokerService.com/']");
            for (Element elem : lstType) {
                System.out.println(elem.getName() + ": " + elem.getText());
            }
      

  7.   

    为什么要用数组呢,list不是更方便么!import java.io.File;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;public class ReadXML
    { public static void main(String[] args)
    {
    SAXReader reader = new SAXReader();
    Document doc = null;
    try
    {
    doc = reader.read(new File("D:" + File.separator + "test.xml"));
    }
    catch (Exception ex)
    {
    ex.printStackTrace();
    }
    int index = 0;
    String serviceid = null;
    List<Element> allObj = new ArrayList<Element>();
    Object[] o = new Object[3];
    Element root = doc.getRootElement();
    Iterator iter = root.elementIterator();
    while (iter.hasNext())
    {
    Element e = (Element) iter.next();
    Iterator bodyIter = e.elementIterator();
    while (bodyIter.hasNext())
    {
    Element child = (Element) bodyIter.next();
    serviceid = child.elementText("ServiceID");
    Iterator acicIter = child.elementIterator();
    while (acicIter.hasNext())
    {
    Element service = (Element) acicIter.next();
    allObj = service.elements();
    } } }
    System.out.println(serviceid); Iterator<Element> obj = allObj.iterator();
    while (obj.hasNext())
    {
    Element e = (Element) obj.next();
    o[index++] = e.getText();
    }
    for (Object oj : o)
    {
    System.out.println(oj);
    }
    }}
      

  8.   

    超级感谢Mice, 100送上,请笑纳.