2013-10-19 66 views
0

我正在研究一个小应用程序,它需要我解析网站上的html网站。 我的问题如下: 解析例程对于一些信息工作正常,但我正在寻找一些方法来获得一些拒绝出现的信息。解析HTML某些特定数据

下面是部分代码结构,我愿意解析:

<body>

`<header> 
    <nav> 
    <div.....> 
     <aside......> 
     <main> 
      <div .....> 
       <a ......> 
       <a ......> 
      </div> 
      . 
      . 
      . 
      <div id="general"> 
       <h2> ........</h2> 
       <p> 
        <span class="label">text</span> 
        "text 2 to be parsed" 
        <br> 
        <span class="label">other text</span> 
        "text 3 to be parsed" 
        <br> 

只是结构的为例,要精确的URL是http://www.ourairports.com/airports/EBBR/pilot-info.html

OK似乎在上面的页面的源代码中,当你看到[div id =“general”],下面有一个[p]后面跟着[span class =“label”]的某些文本时,html代码并未出现在预览中[/ span],并在下面,你有文字在括号之间。这发生在几行,我需要捕捉这些信息。

我试着://体/ DIV /主/格[@ ID = '一般']/P作为XpathQueryString但结果为1个节点和空

也与DIV [@ ID =”一般'],但结果是没有找到节点, 与div [@ id ='general']/p/span结果是没有找到节点, 与/ div/p/span [@ class ='label'] results are标记和>/span>之间的标题,但我期待检索后面的引号之间的文本,我无法弄清楚如何成功。我想我已经尝试了所有的组合(很多别人比上面解释的),但没有机会。有没有特殊的路径可以阅读本文?

感谢您的建议。

顺便说一句,这是我在stackoverflow.com上的第一篇文章,我的第一语言是法语,所以我对任何未遵守规则或我英语不好的人提前道歉。

享受你的一天,晚上,...在键盘上的夜晚。

阿兰

回答

0

你的第一表达//body/div/main/div[@id='general']/p预计返回单个节点,所述<p>。正如你所看到的,它在推荐网站上的工作方式就是如此。表达式向下到达该节点,但不在文本嵌套的位置。但是,您也必须获得文本,只需将其封装在HTML中,并在其周围添加花哨的标签。良好使用的XPath选择器API应该返回匹配的html节点,包括标签本身。
如果你最终看到的只是文本节点尝试以下操作:

认为<跨度> S作为HTML节点,text()节点之间的文字。
//div[@id='general']/p/text()
这将匹配“要解析的文本”。 A node()将匹配任何html节点(甚至是标签之间的文本)和*任何非text()节点。
对于任何数量的步骤,使用双斜线:
//div[@id='general']/p//text()
现在你<p>标签下的每个文本节点匹配,无论嵌套级的。并且由于文本节点按照定义叶节点(不能包含其他节点),因此这可以保证您不会多次将树中相同路径的成员进行匹配。

对你表情的一些评论:
//body是肤浅的,只有一个body和html定义在哪里。
@id量化的节点不应该由父母的选择器继续进行,从//div[@id='something unique']开始。

了解关于XPath的更多信息。正确地返回所选“节点”而不仅仅是连接文本的API可以在理解表达式在实践中如何工作方面发挥重要作用。

+0

嗨,谢谢你的回答。由于我不知道如何直接问你关于同一主题的另一个问题,我只是回答了我自己的问题。你可以关注一下吗?感谢, Al – joloki