繁体   English   中英

基于XML属性值的PHP If / Then

PHP If/Then based on XML Property Values

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个XML文件,该文件正在读取为SimpleXML元素。 在该文件中,我具有以下元素:

<files>
  <file>
    <type>GIF</type>
    <url>http://dl.server.com/1.GIF</url>
  </file>
  <file>
    <type>JPG</type>
    <url>http://dl.server.com/2.JPG</url>
  </file>
  <file>
    <type>TIF</type>
    <url>http://dl.server.com/1.TIF</url>
  </file>
  <file>
    <type>EPS</type>
    <url>http://dl.server.com/1.EPS</url>
  </file>
  <file>
    <type>LEPS</type>
    <url>http://dl.server.com/2.EPS</url>
  </file>
</files>

我正在使用一个foreach()循环并根据元素的值进行操作。 现在,我需要查看所有files-> file-> type值,如果“ LEPS”存在,请使用该URL,否则,如果“ EPS”存在,请使用该URL,如果都不存在,则不执行任何操作。

我的难题是使用XML节点/元素/属性术语,而无法找到一种查询file-> file-> type =“ LEPS”是否正确的方法。 虽然我知道如何检查属性(isset(element ['attributename']),但我不确定如何检查具有特定属性值的元素。

对不起基本问题!

2 个回复

您可以使用谓词来检查<type>以及同级文件/类型的那些。

//files/file
[
    type='LEPS' or
    type='EPS' and not(
        following-sibling::file/type='LEPS' or
        preceding-sibling::file/type='LEPS'
    )
]/url

例:

(出于口味的考虑,此示例使用DOM扩展而不是SimpleXML。xpath表达式本身是不可知的,并且可以在两者中均等地应用。)

/* $xml = your xml string */

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

$query = <<<'XPATH'
//files/file
[
    type='LEPS' or
    type='EPS' and not(
        following-sibling::file/type='LEPS' or
        preceding-sibling::file/type='LEPS'
    )
]/url
XPATH;

foreach ($xpath->query($query) as $node) {
    echo $dom->saveXML($node), "\n";
}

输出:

<url>http://dl.server.com/2.EPS</url>

在基本的伪代码中,您可以在foreach中检查您的类型(如果匹配),存储该URL供以后使用并退出循环。

类似于

url = null
foreach node in element:
    if node->type == 'LEPS':
        url = node->url
        break
    else if node->type == 'EPS':
        url = node->url

// if url is null, no result found
3 如何使用PHP删除所有xml属性值?

使用PHP SimpleXML从xml文件中删除所有属性值 (不是属性)的最佳方法是什么? 条件:输入的xml文件嵌套了已知的属性名称。 输出的xml文件保留所有属性名称,但不保留值。 范例XML: ...

4 如何从PHP输出的XML中访问属性和值

我正在通过第三方提供的API将支付网关集成到我的网站中,并且DID成功。 当它处理付款并在所谓的success.php页面中返回成功结果时,我从他们的simplexml_load_string($result)接收了已经输出的xml,它像这样打印在success.php页面中。 我正在 ...

2018-08-19 07:54:02 1 34   php/ xml
5 通过属性值 PHP 对 XML 进行排序

所以我有一个 XML 文件,我试图根据属性“order”按顺序循环。 下面是一个例子: 我的目标是使用 foreach 遍历每个“树”,但我想按照 order 属性的顺序阅读它们:棒球、飞盘、足球。 (0,1,2)。 对不起,英语不好,不是我的母语。 ...

6 通过属性值帮助将XML解析为PHP

有人可以帮我解决这个问题。 我有以下XML。 我需要获取与“ 75” max-width匹配的photo-url的值。 如何在PHP $xml-&gt;posts-&gt;post['photo-url'] ....中过滤呢? ...

7 PHP和XML中的总和属性值

我有一个用php阅读的xml文件。 目前,我已加载xml,并且其内容很好地显示在表中。 目前,我正在尝试汇总“ points”属性的所有值,计算其平均值并显示该数字。 任何帮助将是最欢迎的,因为目前我必须将所有这些数字加到计算器上。 xml的基本结构大大简化了: 我的PH ...

9 如何通过属性值 PhP 对 xml 子项进行排序

我有一个通过 PHP 的 XML 文件,我试图根据属性“word”在 div 中按升序列出特定的子“word”。 我把 sort($word); 没有成功 这是我的代码: 输出 因此,“球”这个词应该列在“片”之前,按照我上面在 php 页面中解析 xml 时所说的升序排列。 ...

10 使用php从XML文件读取属性值

使用具有以下结构的XML文件: 我可以用php读取带有表达式的attrName值: 因此结果将是: 但是如何使用这种文件结构,无法从上面使用相同的PHP代码获得attrValue? 我收到错误消息: 有人知道我想念什么吗? 谢谢 ...

2014-07-10 12:50:44 1 44   php/ xml
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM