php - XPATH 检查属性是否包含多个值之一

标签 php regex xml xpath

我需要检查 XML 节点的属性是否包含值之一 这是我的 XML:

<manifest>
    <item id="item_557c683790288" href="navigation.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="toc" href="navigation.xhtml" media-type="application/xhtml+xml" properties="nav"/>
    <item id="item_557c68379035d" href="title-page.html" media-type="application/xhtml+xml" properties="scripted"/>
    <item id="item_557c683790414" href="imprint.html" media-type="application/xhtml+xml" properties="scripted svg"/>
    <item id="item_557c6837904b6" href="author.html" media-type="application/xhtml+xml" properties="scripted"/>
    <item id="item_557c683790572" href="file_557c6766c75a9.html" media-type="application/xhtml+xml" properties="scripted"/>
    <item id="item_557c683790625" href="liberio.css" media-type="text/css"/>
    <item id="item_557c6837906ef" href="assets/2dcc626f-387f-4658-d6f6-58570ae176e7.jpg" media-type="image/jpeg"/>
    <item id="item_557c6837907c4" href="assets/liberio_color.svg" media-type="image/svg+xml"/>
    <item id="item_557c683790879" href="assets/93d7f25284aeda831bde692e6b002b9f.png" media-type="image/png"/>
    <item id="item_557c683790949" href="assets/properties.js" media-type="application/javascript"/>
</manifest>

现在我正在使用以下表达式:

$images = $this->opfSxml->xpath("//*[local-name()='manifest']/*[local-name()='item'][contains(@media-type,'png') or contains(@media-type, 'jpg') or contains(@media-type, 'ico') ]");

我的代码可以正常工作,但对我要检查的每个值重复 OR 和 CONTAINS 对我来说并不合适。

有写这个的捷径吗?

最佳答案

使用:

//manifest/*[contains('png|jpeg|ico',substring-after(@media-type,'/'))]

这假设媒体类型是无前缀字符串——也就是说,没有这样的字符串是另一个字符串的前缀。

如果无前缀假设不成立,请使用:

//manifest/*[contains('|png|jpeg|ico|',concat('|',substring-after(@media-type,'/'),'|'))]

关于php - XPATH 检查属性是否包含多个值之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602288/

相关文章:

javascript - 来自任何 XML 的特定 Javascript 对象

java - 将 XML 节点值转换为日期

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

php - Array Unique 在 PHP 中的二维数组中

php - Laravel:使用 `configureMonologUsing()` 的多个日志提供程序?

php - UTF-8贯穿始终

Java正则表达式匹配优先级模式

Java 字符串标记

regex - 使用 grep 计算包含子字符串的单词数

c++ - 从字符串流到字符串的转换删除了 '=' 个字符