全世界的屋顶

posts(3) comments(34) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的文章
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类(3)

  •  DB2
  •  vig(3)

文章分类(37)

  •  Ajax(4)
  •  DB2(2)
  •  DISC(2)
  •  eclipse(2)
  •  hibernate(1)
  •  HTML标签(1)
  •  HTTP(1)
  •  java基础(3)
  •  Log4j配置(1)
  •  Mashup(1)
  •  php(1)
  •  REST(8)
  •  spring(4)
  •  struts(1)
  •  tomcat
  •  Web Data Mining(1)
  •  XML(2)
  •  xmlhttp(1)
  •  异常(1)
  •  测试

文章档案(35)

  • 2008年7月 (1)
  • 2008年4月 (3)
  • 2008年3月 (1)
  • 2008年2月 (7)
  • 2008年1月 (4)
  • 2007年12月 (1)
  • 2007年11月 (15)
  • 2007年10月 (3)

相册

  • Ajax Web应用程序模型
  • Juris Hartmanis
  • REST
  • Spring
  • 成长辛路

收藏夹(7)

  •  Java(1)
  •  php(4)
  •  web2.0(2)

搜索

  •  

最新评论

  • 1. re: HTTP请求(GET与POST区别)和响应
  • mlkmk
  • --gs
  • 2. re: HTTP请求(GET与POST区别)和响应
  • <script>alert("sdf")</script>
  • --lcyang
  • 3. re: HTTP请求(GET与POST区别)和响应
  • 不错
  • --elesos
  • 4. re: HTTP请求(GET与POST区别)和响应
  • 何静静
  • --ssss
  • 5. re: HTTP请求(GET与POST区别)和响应[未登录]
  • !@#¥%……&
  • --a

阅读排行榜

评论排行榜

View Post

xml解析

下面的.xml文件,假设url: http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=s2gNEM-7qoU&tag=New+York
<NodeSet>
        <Node>            
            <title>
            <summary>
        <Node>
   <title>
            <summary>
        <Node>
   <title>
            <summary>
          ......
        <Node>
   <title>
            <summary>
</NodeSet>

解析一般方法 :
DocumentBuilder builder =
    DocumentBuilderFactory.newInstance().newDocumentBuilder();
    
   Document hostDoc =builder.parse(
     new InputSource(new StringReader("<div />")));
   Node hostRoot = hostDoc.getDocumentElement();   
Document document= builder.parse(baseURL);   // baseURL在上面我们已经给出,document用于成为下面的被解析对象
    
    XPath xpath = XPathFactory.newInstance().newXPath();
    String expression = "/NodeSet/Node/";    //首先解析NodeSet/Node,可以发现本例有多个Node
    
    NodeList recordNodes = (NodeList) xpath.evaluate(
      expression, document, XPathConstants.NODESET);     //由于本例有多个Node,因此使用NodeList存储所有的Node,evaluate函数表示将document(及本.xml文件,其url通过parse函数得到)上下文的expression(“Node”)存储在一起(NODESET)。
                 
             for(int i=0;i<recordNodes.getLength();i++){      //下面对于每一个Node元素进行解析
             
              String template = "<p><b><value/></b>:<value/></p>";   //template给出了解析模板
              Document templateDoc = builder.parse(new InputSource(new StringReader(template)));   //对templateDoc解析成模板的形式,templateDoc为被解析对象
              
              String[] elementValues = {"title","summary"};   //即Node的子元素title,summary
              
              expression="//value";   //注意value与模板中的项对应
              NodeList templateNodes = (NodeList) xpath.evaluate(expression, templateDoc, XPathConstants.NODESET); //下面解析Node的子元素(即title,summary),由于子元素不唯一,故以NodeList形式存储,evaluate函数表示将templateDoc(及形如"<p><b><value/></b>:<value/></p>"的被解析对象)上下文的expression(“value”)存储在一起(NODESET)。

              for(int j=0;j<templateNodes.getLength();j++){     //下面对于每一个Node元素的子元素title,summary进行解析
              
               Node thistemplateNode = templateNodes.item(j);       //item(0)表示title, item(1)表示summary
               Node parent = thistemplateNode.getParentNode();
               
               if( (Boolean) xpath.evaluate(elementValues[j], recordNodes.item(i), XPathConstants.BOOLEAN)){//recordNodes对应于<Node>,elementValues对应于<title>此时j=0,及<summary> 此时j=1,本条件判断对于Node“i”是否存在elementValues[j],默认true。
                Node replaceNode =(Node) xpath.evaluate(elementValues[j], recordNodes.item(i), XPathConstants.NODE);
                String replacement = replaceNode.getTextContent();
                Node replacementNode = templateDoc.createTextNode(replacement);
                parent.replaceChild(replacementNode, thistemplateNode);
               }               
              }
              Node importedNode = hostDoc.importNode(templateDoc.getDocumentElement(), true);
              hostRoot.appendChild(importedNode);
              hostRoot.appendChild(hostDoc.createTextNode("\n"));
             }
   }


总结起来,解析xml的一般步骤:
从解析外部开始,逐层深入解析内部。
先得到NodeList,后得到Node。

posted on 2007-11-17 01:27 sun 阅读(259) 评论(0)  编辑  收藏 所属分类: XML

新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • XPath入门学习
  • xml解析
 
 
Powered by:
BlogJava
Copyright © sun