解析xml类型的字符串对我来说是很重要的一部分
String str = "<service><sid>1</sid><name>新闻发布服务</name><port>1599</port></service>";
因为项目中要多次用到解析字符串的方法,麻烦各位给支个招,简单方便快捷的方法是最好的啦

解决方案 »

  1.   

    先弄清xml的数据结构,就很简单了。
    /**
     * 建立数据文件的读取连接
     * 
     * @return 读取成功时返回Document对象,失败则返回空
     */
    public static Document getDocument() { Document doc1 = null;

    File file = new File("xml_path");
    SAXReader xml_read = new SAXReader();
    try {
    doc1 = xml_read.read(file);
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
    }
    return doc1; }
    private Element search_service(Document doc, String id) { Element root = doc.getRootElement();
    String xml_path = "/service/sid";
    Node node = root.selectSingleNode(xml_path);
    if (node != null) {
    if (node.getNodeType() == Node.ELEMENT_NODE) {
    return (Element) node;
    }
    } return null;
    }
    获取xml的数据:
    public void getData(){
    doc = getDocument();
    Element e = search_service(doc, id);
    String name=e.elementText("name");
    ///还要获得其他结点信息
    }基本上可以按上面的去做,只供参考,有些xml路径等其他,要根据你自己的
      

  2.   

    在项目下建立一个xml文件 试着解析一下
    import java.io.File;import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;public class Xml {
    public static void main(String[] args) {
    try {
    DocumentBuilderFactory factory = DocumentBuilderFactory
    .newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new File("./新建 文本文档.xml"));
    NodeList list = document.getElementsByTagName("Header");
    for (int i = 0; i < list.getLength(); i++) {
    System.out.println(list.item(i).getFirstChild().getNodeValue());
    }
    } catch (Exception e) {
    }
    }
    }
      

  3.   

    一般如果是固定标签的话我用digester,用起来也方便,写好rule文件后,不用操作每个结点了
    提供一段代码
    rules.xml
      <?xml version="1.0" encoding="UTF-8" ?> 
     <digester-rules>
     <pattern value="foo">
      <object-create-rule classname="example.Foo" /> 
      <set-properties-rule /> 
      <bean-property-setter-rule pattern="name" /> 
      <bean-property-setter-rule pattern="age" /> 
      <pattern value="bar">
      <object-create-rule classname="example.Bar" /> 
      <set-properties-rule /> 
      <bean-property-setter-rule pattern="id" /> 
      <bean-property-setter-rule pattern="title" /> 
      <set-next-rule methodname="setBars" /> 
    <pattern value="childList">
    <pattern value="child">
      <object-create-rule classname="example.Child" /> 
      <set-properties-rule /> 
      <bean-property-setter-rule pattern="sex" /> 
      <bean-property-setter-rule pattern="school" /> 
      <set-next-rule methodname="addChild" /> 
      </pattern>
      </pattern>
      </pattern>
      </pattern>
      </digester-rules>
    foo.xml
    <?xml version="1.0" encoding="UTF-8" ?> 
    <foo>
      <name>myname</name> 
      <age>123</age> 
    <bar>
      <id>123</id> 
      <title>the First Child</title> 
    <childList>
    <child>
      <sex>male</sex> 
      <school>jakakかかかjakak</school> 
      </child>
    <child>
      <sex>female</sex> 
      <school>campus</school> 
      </child>
      </childList>
      </bar>
      </foo>java文件public class ObjectToXml {
    public static void main(String args[]) throws Exception
    {
    File data = new File("src/resources/foo.xml");
    File rule = new File("src/resources/rules.xml");
    Digester digester = DigesterLoader.createDigester(rule.toURI().toURL());
    Foo foo = (Foo)digester.parse(data);
    Iterator it = foo.getBars();
    while(it.hasNext())
    System.out.println((String)it.next());
    }}
      

  4.   

    用dom4j解析xml文件,很简单!网上很多例子!
      

  5.   

    用dom4j解析xml文件
    Document doc=DocumentHelper.parseText(xml);
      

  6.   

    给你一个最简单的方法:使用XStream
    首先你要下载一个xstream包并应入到项目中
    写XML文件:
    public class WriteXml {
     import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import com.thoughtworks.xstream.*;
     public static boolean writes(Object[] bean,String XMLNAME) {
      //Set the properties using the setter methods
     //Note: This can also be done with a constructor.
     //Since we want to show that XStream can serialize
     //even without a constructor, this approach is used.
     //Serialize the object
     XStream xs = new XStream(); //Write to a file in the file system
     try {
        FileOutputStream fs = new FileOutputStream("./XML/"+XMLNAME);    xs.toXML(bean, fs);
         return true;
     } catch (FileNotFoundException e1) {
     return false;
     
     }
     }读XML文件:import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.InvalidPropertiesFormatException;
    import java.util.Properties;import com.thoughtworks.xstream.*;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    import MZ.Factory.*;
    public class Reader { public static void read(String object,String XMLNAME) throws InvalidPropertiesFormatException, FileNotFoundException, InstantiationException, IllegalAccessException, ClassNotFoundException, IOException{
     XStream xs = new XStream(new DomDriver());
     Object o= factory.getobject(object); try {
     FileInputStream fis = new FileInputStream("./XML/"+XMLNAME);
     xs.fromXML(fis, o); //print the data from the object that has been read
     System.out.println(o.toString()); } catch (FileNotFoundException ex) {
     System.out.print("xml文件不存在!!请检查路径是否正确");
     ex.printStackTrace();
     } }
    }这个方法比dom、sax、stax方法简单一些!!!
      

  7.   

    books.xml:
    <?xml version="1.0" encoding="GBK"?>
    <books>
      <!--—An XML Example--><?target text?>
      <bookone title="XML study" publisher="angellove workers">
        <article level="high" date="December-2007">
          <title>Java configuration with XML</title>
          <author>
            <firstname>angel</firstname>
            <lastname>free</lastname>
          </author>
        </article>
      </bookone>
    </books>import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.Element;
    import org.dom4j.io.XMLWriter;
    import java.io.*;
    import org.dom4j.Attribute;
    import org.dom4j.DocumentException;
    import org.dom4j.io.SAXReader;
    import java.util.List;
    import java.util.Iterator;
    import org.dom4j.QName;
    public class dom4j {
    public void readAttribute(String filename, String xpath, String attribute) {
    SAXReader saxReader = new SAXReader();
    try {
    Document document = saxReader.read(new File(filename));
    List list = document.selectNodes(xpath);
    Iterator iter = list.iterator();
    while (iter.hasNext()) {
    Element element = (Element) iter.next();
    }
    } catch (DocumentException e) {
    e.printStackTrace();
    }
    }
    public static void main(String[] argv) {
    dom4j ptree = new dom4j();
    ptree.modifyXML();
        ptree.mymodifXML(new File("books.xml.xml") );
    }
    // 创建一个xml文件
         public void changeXML() {
           Document document = DocumentHelper.createDocument();// 创建一个xml document对象
           Element books = document.addElement("books");// 创建根节点元素
           // 给books添加注释
           books.addComment("—An XML Example");
           // 使用addProcessingInstruction()方法增加一个处理指令
           books.addProcessingInstruction("target", "text");
           // 在当前元素后增加一个子元素
           Element bookone = books.addElement("bookone");
           // 设置当前元素的属性
           bookone.addAttribute("title", "XML study");
           bookone.addAttribute("publisher", "angellove workers");
           Element article = bookone.addElement("article");
           article.addAttribute("level", "high");
           article.addAttribute("date", "December-2007");
           Element titleElement = article.addElement("title");
           // 设置当前元素的文本值,即是内容
           titleElement.setText("Java configuration with XML");
           Element authorElement = article.addElement("author");
           Element firstNameElement = authorElement.addElement("firstname");
           firstNameElement.setText("angel");
           Element lastNameElement = authorElement.addElement("lastname");
           lastNameElement.setText("free");
           // XML 声明 <?xml version="1.0" encoding="UTF-8"?> 自动添加到 XML 文档中。
           try {
             // 创建一个xml写入流,将生成的xml文件写入指定的文件中
             // 使用优雅的方式写入(一共有三种方式:普通方式,优雅方式和紧凑方式)
             //紧凑方式写入format = OutputFormat.createCompactFormat();
             OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding("GBK");
             XMLWriter output = new XMLWriter(
                 new FileWriter(new File("books.xml")), format);
             output.write(document);
             output.close();
           }
           catch (IOException e) {
             System.out.println(e.getMessage());
           }
         }
        // 使用XPath表达式的查询
         public void modifXML(File inputXml) {
           try {//创建一个读取xml文件的对象
             SAXReader saxReader = new SAXReader();//读取并获得xml文档
             Document document = saxReader.read(inputXml);
             //使用XPATH表达式从article元素中获得level节点列表
             List list = document.selectNodes("//article/@level");
             //创建一个迭代器.
             Iterator iter = list.iterator();
             while (iter.hasNext()) {
               //获得level节点的属性
               Attribute attribute = (Attribute) iter.next();
               if (attribute.getValue().equals("high"))
                 //设置属性的值
                 attribute.setValue("low");
             }
             list = document.selectNodes("//article/@date");
             iter = list.iterator();
             while (iter.hasNext()) {
               Attribute attribute = (Attribute) iter.next();
               if (attribute.getValue().equals("December-2007"))
                 attribute.setValue("October-2006");
             }
             list = document.selectNodes("//article");
             iter = list.iterator();
             while (iter.hasNext()) {
               Element element = (Element) iter.next();
               Iterator iterator = element.elementIterator("title");
               while (iterator.hasNext()) {
                 Element titleElement = (Element) iterator.next();
                 //获得属性的文本.
                 if (titleElement.getText().equals("Java configuration with XML"))
                   //重新设置属性的文本
                   titleElement.setText("good good study,day day up");
               }
             }
             list = document.selectNodes("//article/author");
             iter = list.iterator();
             while (iter.hasNext()) {
               Element element = (Element) iter.next();
               Iterator iterator = element.elementIterator("firstname");
               while (iterator.hasNext()) {
                 Element firstNameElement = (Element) iterator.next();
                 if (firstNameElement.getText().equals("angel"))
                   firstNameElement.setText("god");
               }
             }
             list = document.selectNodes("//article/author");
             iter = list.iterator();
             while (iter.hasNext()) {
               Element element = (Element) iter.next();
               Iterator iterator = element.elementIterator("lastname");
               while (iterator.hasNext()) {
                 Element lastNameElement = (Element) iterator.next();
                 if (lastNameElement.getText().equals("free"))
                   lastNameElement.setText("dark");
               }
             }
             OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding("GBK");
             XMLWriter output = new XMLWriter(new FileWriter(new File("modifyBooks.xml")), format);
             output.write(document);
             output.close();
           }catch (DocumentException e) {
           }catch (IOException e) {
           }
         }
    //访问其中某一特定节点
    public void modifyXML() {
    try {
    SAXReader sreader = new SAXReader();
    Document document = sreader.read(new File("E:\\eagle\\jms\\exc1.xml")); // E:\\eagle\\jms\\exc1.xml
    Element element = document.getRootElement();
    //获得根元素的名字
    String rootname = element.getName();
    String textname = element.getText();
    System.out.println("rootname=" + rootname);
    //获得指定QName,prefix,uri
    QName qname = element.getQName();
    //获得当前元素指定属性的值
    List list = element.elements();
    Iterator iterator = list.iterator();
    while (iterator.hasNext()) {
    Element node = (Element) iterator.next();
    if ("InfStatus1".equals(node.attributeValue("RequestObject"))) {
    //重新设置当前元素的名字
    node.setName("InfEXC");
    }
    if ("Head".equals(node.getName())) {
    node.setName("Head");
    } else {
    iterator = node.elementIterator();
    }
    }
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("utf-8");
    XMLWriter output = new XMLWriter(new FileWriter(new File("E:\\eagle\\jms\\modifyExc.xml")), format);
    output.write(document);
    output.close();
    } catch (DocumentException e) {
    } catch (IOException e) { }
    }
    }
      

  8.   

    都看不懂斑竹提出的问题,在这里瞎回答,显得你们聪明?猪头斑竹 说的是 解析xml形式的字符串,不是解析XML文件.
      

  9.   

    看到是解析xml格式字符串。看看前辈的自己也写了一个,不知是否符合,大家互相学习,当然理论是一样的,但是还要根据个人的xml格式来写方法。都是借鉴,学习学习
    /**读取XML格式的字符串,根据属性来查找值
     * @param xmlStr 是要解析的xml格式的字符串
     * @param name 是在xml字符串中要获得标签属性
     * @return 返回的标签属性是name的值
     */
    public String myParseXMLStr(String xmlStr, String name){
    String value = "";
    StringReader sr = new StringReader(xmlStr);
    InputSource is = new InputSource(sr);
    SAXBuilder sb = new SAXBuilder();
    try{
    Document d = sb.build(is);
    Element e = d.getRootElement();
    value = e.getChild(name).getValue();
    }catch(JDOMException   e){
                e.printStackTrace();
        }catch(IOException   e)   {
            e.printStackTrace();
        }
        return value;
    }
      

  10.   

    import java.io.IOException;
    import java.io.StringReader;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.xml.sax.InputSource;
    网上自己下个jdom.jar的包。