PHP DOMDocument 中 XML 内 HTML 表的 Xpath 查询

2024-05-08

我有一个具有以下树结构的 XML 文件。

<rss xmlns:dc="http://purl.org/dc/elements/1.1/"  xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
    <title>Videos</title>
    <link>https://www.example.com/r/videos/</link>
    <description>A long description of the video.</description>
    <image>...</image>
    <atom:link rel="self" href="http://www.example.com/videos/.xml" type="application/rss+xml"/>
    <item>
        <title>The most used Jazz lick in history.</title>
        <link>
        http://www.example.com/
        </link>
        <guid isPermaLink="true">
         http://www.example.com/
        </guid>
    <pubDate>Mon, 07 Sep 2015 14:43:34 +0000</pubDate>
    <description>
    <table>
        <tr>
            <td>
                <a href="http://www.example.com/">
                    <img src="http://www.example.com/.jpg" alt="The most used Jazz lick in history." title="The most used Jazz lick in history." />
                </a>
            </td>
            <td> submitted by 
                <a href="http://www.example.com/"> jcepiano </a>
                <br/>
                <a href="http://www.youtube.com/">[link]</a>
                <a href="http://www.example.com/">
                    [508 comments]
                </a>
            </td>
        </tr>
    </table>
    </description>
    <media:title>The most used Jazz lick in history.</media:title>
    <media:thumbnail url="http://example.jpg"/>
    </item>
</channel>
</rss>

这里,htmltable元素嵌入在 XML 中,这让我很困惑。

现在我想选择文本节点值//channel/item/title和 href 值//channel/item/description/table/tr/td[1]/a[1](带有文本节点value = "[link]")

在上面的第二种情况下,我正在寻找第二种情况的值a(带有文本节点value = "[link]"),第 2 内td inside tr, table, description, item, channel.

我正在使用 PHPDOMDocument();

我已经为此寻找完美的解决方案两天了,您能告诉我这会如何发生吗?

另外我需要计算提要中的项目总数,现在我正在这样做:

...
$queryResult = $xpathvar->query('//item/title');
$total = 1;
foreach($queryResult as $result){
           $total++;
}
echo $title;

我还需要 XPath 查询选择器规则的参考链接。

提前致谢! :)


您写道您想要以下查询的结果集的长度:

$queryResult = $xpathvar->query('//item/title');

我假设$xpathvar这是类型DOMXPath http://php.net/manual/en/class.domxpath.php。如果是的话,它有一个此处描述的长度属性 https://stackoverflow.com/questions/1121437/finding-number-of-nodes-in-php-dom-xpath。而不是使用foreach,只需使用:

$length = $xpathvar->query('//item/title')->length;

现在我想选择文本节点值//channel/item/title

你可以用表达式得到//channel/item/title/text().

和 href 值//channel/item/description/table/tr/td[1]/a[1](带有文本节点value = "[link]")

您在这里的表达式选择任何tr, 首先td在此之下,然后是第一个a。但第一个a没有一个值"[link]"在你的来源中。不过,如果您想要这样,您可以使用:

//channel/item/description/table/tr/td[1]/a[1]/@href

但看起来你更想要:

//channel/item/description/table/tr/td/a[. = "[link]"][1]/@href

找到第一个a树中具有以下值(文本节点)的元素"[link]".

在上面的第二种情况下,我正在寻找第二种情况的值a(带有文本节点value = "[link]"),第 2 内td inside tr, table, description, item, channel.

不确定这是一个单独的问题还是旨在解释前一个问题。无论如何,答案与前一个相同,除非您明确想要搜索第二个a等(即按位置搜索),在这种情况下您可以使用数字谓词。


注意:大部分表达式都是以//expr,这本质上意味着:在任意深度搜索整个树以查找表达式expr。这可能很昂贵,如果您需要的只是一个知道起点或表达式的(相对)根节点,那么使用直接路径更好,而且性能更高。对于你的情况,你可以替换//channel for /*/channel(因为它是根元素下的第一个)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP DOMDocument 中 XML 内 HTML 表的 Xpath 查询 的相关文章

  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • 如何保留标记?

    我有一个包含新闻报道的 XML 文档 并且新闻报道的 body 元素在纯文本中包含 p 标签 当我使用 XSL 检索正文时 例如
  • Android:java.lang.OutOfMemoryError:

    我在 Android 上开发了一个使用大量图像的应用程序 可绘制文件夹中有很多图像 比如说超过 100 张 我正在开发图像动画应用程序 我使用 imageview 来显示 GIF 图像 我使用了将 gif 图像分割成多个 PNG 格式图像的
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 使用 jQuery inputmask 插件范围 0-100

    如何创建 0 到 100 范围内的掩码 document ready function masked inputmask 您可以使用jquery inputmask regex extensions js为了那个原因 你可以找到带有所有扩展
  • Bootstrap 响应式表格在 iOS 设备上无法垂直滚动

    这就是我所拥有的 div class table responsive table class table style background transparent table div 我正在使用以下 bootstrap css 文件 ht
  • JAXB 继承冲突 - 重新注释子类

    目前我的项目中有这样的环境 public abstract class Foo private List
  • Firefox 忽略 CSS 中的最小高度

    由于某些原因 最小高度在 Firefox 上不起作用 我尝试在 body 上设置 min height 但 Firefox 完全忽略了它 由于我的页面是动态的 我不能只将高度设置为 100 我应该怎么办 body border 1px so
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 如何显示接下来的三个图像单击加载更多按钮

    我需要一个加载更多按钮来显示图像 页面加载时 我显示 3 个图像 单击 加载更多 按钮后 接下来的 3 个图像将显示在屏幕上 我尝试了下面的代码 但它不起作用 你能帮我解决这个问题吗 function item slice 0 2 show
  • 如何处理致命错误:cURL错误7:无法连接到xxxx端口443

    我有一个连接到第三方 API 的脚本 它是并且应该在 24 7 不间断循环上运行 我在重新启动循环之前在最后使用睡眠 问题是 有时第三方 API 会被拒绝 或者连接会因以下错误而中断 致命错误 未捕获的异常 GuzzleHttp Ring
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 以编程方式创建 FloatingActionButton(无需 xml)

    我很欣赏 Android 的 FloatingActionButton fab 功能 并希望在我的项目中的许多不同地方使用它们 现在 我有这样的东西 我有几个 xml 规范 除了 id 图标和 onclick 之外 所有这些规范都是相同的
  • 线性布局高度和重量

    我有以下内容
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • 使用 string.whitespace 删除 Python 中的空格

    Python 的 string whitespace 很棒 gt gt gt string whitespace t n x0b x0c r 如何在不手动输入 t n 等正则表达式的情况下将其与字符串一起使用 例如 它应该能够转动 请不要伤
  • jQuery:评估 ajax 响应中的脚本

    来自我的 web 应用程序的 XML 响应既有要添加到页面的 HTML 也有要运行的脚本 我正在尝试从我的网络应用程序发回 XML 例如
  • 散景服务器获取鼠标位置

    我正在开发一个带有散景 0 12 2 的交互式应用程序 它根据特定的交互更新绘图 现在 我使用滑块来更改图中字形的位置 但实际上我想访问鼠标在特定图中的位置 数据集是一个多维矩阵 张量 密集数据 每个图在特定位置显示一个维度 如果我更改一个
  • 与 Ruby 1.9.X 中的 Iconv.conv("UTF-8//IGNORE",...) 等效吗?

    我正在从远程源读取数据 偶尔会得到另一种编码的一些字符 它们并不重要 我想得到一个 最佳猜测 utf 8 字符串 并忽略无效数据 主要目标是获得一个我可以使用的字符串 并且不会遇到以下错误 编码 UndefinedConversionErr
  • 使用 Doctrine2 时的多重歧视级别

    我正在使用 Doctrine2 来管理我的模型 如下 有一个抽象概念Content与复合模式Gallery 也是一个抽象概念Media从中Video and Image继承 我的选择是添加鉴别器Content and Media表以便区分G
  • 改变 RGB 颜色的色调

    我正在尝试编写一个函数来改变 RGB 颜色的色调 具体来说 我在 iOS 应用程序中使用它 但数学是通用的 下图显示了 R G 和 B 值如何随色调变化 看起来 编写一个函数来改变色调似乎应该是一个相对简单的事情 而不需要对不同的颜色格式进
  • 如何从 Java 类调用 Kotlin 类

    我需要将意图从 java 活动传递到 Kotlin 活动 Java活动ProfileActivity class Intent selectGameIntent new Intent ProfileActivity this kotlin
  • EF 6 基于代码的迁移:向现有实体添加非空属性

    我想向现有表添加一个非空外键列 环境 EF 6 代码优先 基于代码的迁移 Code from Migration class for new entity Currency CreateTable dbo Currency c gt new
  • 了解子表单何时关闭

    我有一个带有按钮的 Form1 当您单击按钮时 将执行以下代码块 Form2 frm new Form2 frm Name Form musteriNumarasi ToString frm Text Kullan c musteriNum
  • 有没有办法自动折叠解决方案资源管理器中的脚本文档部分?

    在调试模式下 解决方案资源管理器有一个脚本文档部分 默认情况下它是展开的 当调试器运行时 新的ScriptDocumentxxx poll txt文件被添加到此部分 当我浏览资源管理器文件时 添加这些新行项目会导致资源管理器的整个内容向下移
  • 如何获取每个类别(例如 WooCommerce 后端)的产品数量?

    我正在建立一个新网站 我对 Woocommerce 非常满意 我只需要一个快速技巧来获取每个类别中的产品数量 我已经调出了每个产品的类别 但无法弄清楚如何从该类别中获取产品数量 我有一个适合我的产品的列表样式 实际上是活动网站的活动 查看图
  • 如何找到类路径上具有特定方法注释的所有类?

    我想在Java中实现一个基于注释的初始化机制 具体来说 我定义了一个注释 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface Initia
  • VHDL STD_LOGIC_VECTOR 通配符值

    我一直在尝试用 VHDL 代码为我在 Altera DE1 板上实现的简单 16 位处理器编写有限状态机 在有限状态机中 我有一个CASE处理不同 16 位指令的语句 这些指令由 16 位 STD LOGIC VECTOR 带入 FSM 但
  • 客户端凭据授予的访问令牌是否可以映射到用户?

    我想使用 oauth2 中的客户端凭据授予来保护 API 但是 我希望访问令牌映射到单个用户 由我在带外信任 设置阶段选择 在该阶段我共享密钥 秘密 这是一个问题吗 我知道使用客户端凭据授予的访问令牌不应该在用户的上下文中 以这种方式绑定它
  • 自定义键盘 iphone,UITextView 中的退格按钮有问题

    检查此代码 我的自定义键盘 IBAction updateTextBackSpace id sender if txtview text length gt 0 NSString deletedLastCharString txtview
  • 如何告诉杰克逊在反序列化期间忽略空对象?

    在反序列化过程中 据我理解是将JSON数据转换为Java对象的过程 我如何告诉Jackson 当它读取不包含数据的对象时 应该忽略它 我正在使用 Jackson 2 6 6 和 Spring 4 2 6 我的控制器收到的JSON数据如下 i
  • Linq:Select 和Where 之间有什么区别

    The Select and WhereLinq 中提供了方法 对于这两种方法 每个开发人员都应该了解什么 例如 何时使用其中一种而不是另一种 使用一种相对于另一种的优势等 Where 查找匹配的项目并仅返回匹配的项目 过滤 gt IEnu
  • 从 python 的单词列表中查找最长的常见单词序列

    我搜索了很多解决方案 确实发现了类似的问题 这个答案 https stackoverflow com questions 21930757 longest repeated substring返回可能不属于输入列表中所有字符串的最长字符序列
  • 使用 D3.js 解析时间序列数据

    是时候寻求帮助了 我已经学习 D3 js 几个星期了 我才开始觉得我理解了其中的 10 哈哈哈 我正在尝试生成一个非常简单的线图 只要数据非常简单 我就可以做到这一点 但我的原始数据源具有 UTC 时间戳和实数 小数 这会导致任何超出简单范
  • PHP DOMDocument 中 XML 内 HTML 表的 Xpath 查询

    我有一个具有以下树结构的 XML 文件