我需要获得custom_field" NewTitle"的价值。 (ID 6)嵌套在孩子的内部" custom_fields"以下XML:
<issues total_count="63" offset="0" limit="100" type="array">
<issue>
<id>65</id>
<project id="7" name="ProjectName"/>
<tracker id="7" name="TrackerName"/>
<subject>MySubject</subject>
...
<custom_fields type="array">
<custom_field id="4" name="OrderType">
<value>Project</value>
</custom_field>
<custom_field id="26" name="ExtID">
<value>246558</value>
</custom_field>
<custom_field id="25" name="Area" multiple="true">
<value type="array">
<value>Process</value>
<value>System</value>
</value>
</custom_field>
<custom_field id="6" name="NewTitle">
<value>ABCDEF</value>
</custom_field>
...
<custom_field id="20" name="KST">
<value/>
</custom_field>
<custom_field id="11" name="LKF">
<value>3</value>
</custom_field>
<custom_field id="17" name="Link">
<value>XXX</value>
</custom_field>
</custom_fields>
<created_on>2015-12-14T08:00:03Z</created_on>
<updated_on>2016-01-28T09:07:20Z</updated_on>
<closed_on/>
</issue>
</issues>
有人可以告诉我如何用PHP做到这一点吗?我只设法显示主要字段的值。例如主题:
foreach ($xml->issue as $issue){
if((string) $issue->tracker['id'] == 7){
echo $issue->subject.'<br/>';
}
}
答案 0 :(得分:3)
将SimpleXML与xpath结合使用:
$xml = simplexml_load_string($your_xml_here);
$fields = $xml->xpath("//custom_field[@name='NewTitle']");
foreach ($fields as $field) {
// do sth. useful here
}
答案 1 :(得分:0)
您对选择所需<value>
的密钥并不十分具体。
我假设你想要选择......
<value>
<custom_field>
name = "NewTitle"
和id = "6"
<issue>
祖先的孩子<tracker>
,其属性为id = "7"
xpath
是一个很好的解决方案,可以直接获得该值而无需迭代。对于SQL
,它就像XML
。选择正确的<issue>
:
/issues/issue[tracker/@id='7']
请注意/
如何将父母与子女分开,条件在[]
范围内,属性有@
。
在该问题中,选择具有给定属性的<custom_field>
:
(...)/custom_fields/custom_field[@name='NewTitle'][@id='6']
然后得到<value>
个孩子(可能不只是1个):
(...)/value
组合:
$xml = simplexml_load_string($x);
$values = $xml->xpath("/issues/issue[tracker/@id='7']/custom_fields/custom_field[@name='NewTitle'][@id='6']/value");
$values
是一个包含单个<value>
节点或空数组的数组:
foreach ($values as $val)
echo $val->asXML();
输出:
<value>ABCDEF</value>
在行动中看到它:https://eval.in/509835
答案 2 :(得分:-1)
我手头上没有短信,也不能自己尝试,但这应该可以解决问题,让你知道如何通过xml嵌套进行迭代。
foreach ($xml->issue as $issue){
foreach ($issue['custom_field'] as $custField){
echo $custField['value'];
}
}