首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP和XPath实现屏幕抓取

用PHP和XPath实现屏幕抓取
EN

Stack Overflow用户
提问于 2009-01-07 13:31:49
回答 5查看 2.3K关注 0票数 1

有人知道在使用XPath提取数据时如何保持文本格式吗?

我正在提取所有的区块

<div class="info"> <h5>title</h5> text <a href="somelink">anchor</a> </div>

从一个页面。问题是当我访问nodeValue时,我只能获得纯文本。如何在代码中捕获包括格式化在内的内容,即h5和一个蒸馏器?

提前谢谢。我在谷歌上搜索了所有能想到的组合,但没有找到。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-07 13:37:30

如果您将其作为DomElement $element作为DomDocument $dom的一部分,那么您将希望执行以下操作:

代码语言:javascript
复制
$string = $dom->saveXml($element);

元素的NodeValue实际上是文本值,而不是结构化的XML。

票数 2
EN

Stack Overflow用户

发布于 2009-01-08 09:42:26

我想补充一下Ciaran McNulty的答案

您可以在SimpleXml中执行相同的操作,如:

代码语言:javascript
复制
$simplexml->node->asXml(); // saveXml() is now an alias

并在引用的基础上展开

元素的NodeValue实际上是文本值,而不是结构化的。

您可以按如下方式考虑您的节点:

代码语言:javascript
复制
<div class="info">
    <__toString()> </__toString()>
    <h5>title</h5>
    <__toString()> text </__toString()>
    <a href="somelink">anchor</a>
    <__toString()> </__toString()>
</div>

其中对$element->nodeValue的调用类似于对$element->__toString()的调用,它只会获取__toString()元素。我创建的虚构__toString()被正式定义为XML_TEXT_NODE

票数 1
EN

Stack Overflow用户

发布于 2009-01-10 21:15:00

旨在嵌入到另一种语言中(如DOM、XSLT、XQuery等)并且不能用于独立的。最初的问题没有具体说明什么是所需的嵌入。

当XPath嵌入到 中时,下面的是一个非常简单而简短的解决方案。

此转换

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="div[@class='info']">
       <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

在此xml文档上应用时的

代码语言:javascript
复制
<html>
    <body>
        <div class="info">
            <h1>title1</h1> text1
            <a href="somelink1">anchor1</a>
        </div>
        Something else here
        <div class="info">
            <h2>title2</h2> text2
            <a href="somelink2">anchor2</a>
        </div>
        Something else here
        <div class="info">
            <h3>title3</h3> text3
            <a href="somelink3">anchor3</a>
        </div>
    </body>
</html>

生成所需的结果

代码语言:javascript
复制
<div class="info">
  <h1>title1</h1> text1
    <a href="somelink1">anchor1</a>
</div>
        Something else here
<div class="info">
  <h2>title2</h2> text2
  <a href="somelink2">anchor2</a>
</div>
        Something else here
<div class="info">
  <h3>title3</h3> text3
  <a href="somelink3">anchor3</a>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/420304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档