Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对一些特定数据的HTML解析_Html_Xpath_Xcode4 - Fatal编程技术网

对一些特定数据的HTML解析

对一些特定数据的HTML解析,html,xpath,xcode4,Html,Xpath,Xcode4,我正在开发一个小应用程序,它要求我解析web上的html站点。 我的问题如下: 解析例程对于一些信息来说工作得很好,但我正在花几个小时寻找一种方法来获取一些拒绝出现的信息 下面是我愿意解析的部分代码结构: ` 好的,html代码似乎没有出现在预览中,因此在上面页面的源代码中,当您看到[div id=“general”]时,下面是一个[p],后面是[span class=“label”]一些文本[/span],下面是括号中的文本。这发生在几行,我需要捕捉这些信息 我曾尝试将://body/di

我正在开发一个小应用程序,它要求我解析web上的html站点。 我的问题如下: 解析例程对于一些信息来说工作得很好,但我正在花几个小时寻找一种方法来获取一些拒绝出现的信息

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

`

好的,html代码似乎没有出现在预览中,因此在上面页面的源代码中,当您看到[div id=“general”]时,下面是一个[p],后面是[span class=“label”]一些文本[/span],下面是括号中的文本。这发生在几行,我需要捕捉这些信息

我曾尝试将://body/div/main/div[@id='general']/p用作XpathQueryString,但结果是1个节点且为空

也使用div[@id='general'],但结果未找到节点, 对于div[@id='general']/p/span,未找到结果节点, 使用//div/p/span[@class='label']时,结果是标志和>/span>之间的标题,但我正在查找后面引号之间的文本,我无法确定如何成功。我想我已经尝试了所有的组合(比上面解释的更多),但没有机会。是否有特殊的路径来访问此文本

谢谢你的建议

顺便说一句,这是我在stackoverflow.com上的第一篇帖子,我的第一语言是法语,所以我为没有遵守任何规则或我的英语不好提前道歉

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


Alain

您的第一个表达式
//body/div/main/div[@id='general']/p
应返回单个节点。正如你所观察到的,它在被引用的网站上就是这样工作的。表达式向下延伸到该节点,但不深入文本嵌套的位置。然而,你也必须得到文本,只是用html封装,周围有花哨的标签。正确使用的良好XPath选择器API应该返回匹配的html节点,包括标记本身。
如果最后看到的只是文本节点,请尝试以下操作:

将s中的文本视为html节点,
text()
节点。
//div[@id='general']/p/text()

这将与“要分析的文本”匹配。
node()
将匹配任何html节点(甚至标记中的文本)和
*
任何非
text()
节点。
对于任意数量的步骤,请使用双斜杠:
//div[@id='general']/p//text()

现在,无论嵌套级别如何,都要匹配标记下的每个文本节点。而且,由于文本节点根据定义是叶节点(不能包含其他节点),这保证了不会多次匹配树下同一路径的成员

关于你的一些评论:
//body
是肤浅的,只有一个body,html精确地定义了其中的位置。
@id
量化的节点不需要由其父节点的选择器继续,从
//div[@id='something unique']
开始


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

您好,谢谢您的回答。由于我不知道如何直接问你关于同一主题的另一个问题,我只是回答了我自己的问题。你能看一下吗?谢谢,艾尔
   `<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>