首页
学习
活动
专区
圈层
工具
发布

PHP请求
EN

Stack Overflow用户
提问于 2020-10-12 09:34:25
回答 1查看 61关注 0票数 1

我在通过以下方式加载的XML文件中提供了一个票证列表:

代码语言:javascript
复制
$xml = simplexml_load_file($xmlFile);

票的记录中包含两个字段,如下所示:

代码语言:javascript
复制
<tickets>
  <ticket>
    <custom-fields>
      <custom-field type="List" name="public" id="1392571">Public</custom-field>
      <custom-field type="List" name="Typ" id="1150963">Change Request</custom-field>
    </custom-fields>
  </ticket>
  <ticket>
    <custom-fields>
      <custom-field type="List" name="public" id="1392571">Non-Public</custom-field>
      <custom-field type="List" name="Typ" id="1150963">Change Request</custom-field>
    </custom-fields>
  </ticket>
</tickets>

现在,我只想展示公共门票。但是我想展示一下这张票的类型。

所以我需要检查一下

如果第一个自定义字段具有属性“name=”“Public”和值“Public”

  1. ,则显示来自具有属性name="Typ"

的同级字段的值。

我已经可以检查的第一部分是:

代码语言:javascript
复制
if($ticket->{'custom-fields'}[0]->{'custom-field'}[0]) == "PUBLIC"){
  //now populate the Value from the second field
}

问:我现在如何从兄弟姐妹中提取值?

或者更好。是否有可能得到具有特殊值的字段的值?我在XPATH中使用的Liek:

代码语言:javascript
复制
/tickets/ticket/custom-fields/custom-field[@name="public"]/../custom-field[@name="Typ"]

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 10:17:05

您完全可以使用XPath查询:'/tickets/ticket/custom-fields[custom-field="Public"]/custom-field[@name="Typ"]'来完成这一任务。

完整的例子:

代码语言:javascript
复制
$xmlString = '
<tickets>
  <ticket>
    <custom-fields>
      <custom-field type="List" name="public" id="1392571">Public</custom-field>
      <custom-field type="List" name="Typ" id="1150963">Change Request (public)</custom-field>
    </custom-fields>
  </ticket>
  <ticket>
    <custom-fields>
      <custom-field type="List" name="public" id="1392571">Non-Public</custom-field>
      <custom-field type="List" name="Typ" id="1150963">Change Request (non-public)</custom-field>
    </custom-fields>
  </ticket>
</tickets>';

$xmlDoc = new SimpleXMLElement($xmlString);

$output = $xmlDoc->xpath('/tickets/ticket/custom-fields[custom-field="Public"]/*[@name="public"]/../custom-field[@name="Typ"]');

给出

代码语言:javascript
复制
array(1) {
  [0]=>
  object(SimpleXMLElement)#2 (2) {
    ["@attributes"]=>
    array(3) {
      ["type"]=>
      string(4) "List"
      ["name"]=>
      string(3) "Typ"
      ["id"]=>
      string(7) "1150963"
    }
    [0]=>
    string(15) "Change Request (public)"
  }
}

在PHP7.2上测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64315237

复制
相关文章

相似问题

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