如何使用PHP获取特定XML子级的值
我需要获取自定义_字段“NewTitle”(ID 6)的值,该字段嵌套在以下XML的子“自定义_字段”中:如何使用PHP获取特定XML子级的值,php,xml,api,simplexml,redmine,Php,Xml,Api,Simplexml,Redmine,我需要获取自定义_字段“NewTitle”(ID 6)的值,该字段嵌套在以下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"/> <
<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>
65
我的主体
...
项目
246558
过程
系统
ABCDEF
...
3.
XXX
2015-12-14T08:00:03Z
2016-01-28 09:07:20Z
有人能告诉我如何用PHP实现吗?我只显示了主字段的值。例如,主题:
foreach ($xml->issue as $issue){
if((string) $issue->tracker['id'] == 7){
echo $issue->subject.'<br/>';
}
}
foreach($xml->issue as$issue){
如果((字符串)$issue->tracker['id']==7){
echo$issue->subject.“
”;
}
}
将SimpleXML与xpath结合使用:
$xml = simplexml_load_string($your_xml_here);
$fields = $xml->xpath("//custom_field[@name='NewTitle']");
foreach ($fields as $field) {
// do sth. useful here
}
将SimpleXML与xpath结合使用:
$xml = simplexml_load_string($your_xml_here);
$fields = $xml->xpath("//custom_field[@name='NewTitle']");
foreach ($fields as $field) {
// do sth. useful here
}
我手头没有文本编辑器,我自己也无法尝试,但这应该可以解决问题,让您了解如何通过xml嵌套进行编辑
foreach ($xml->issue as $issue){
foreach ($issue['custom_field'] as $custField){
echo $custField['value'];
}
}
我手头没有文本编辑器,我自己也无法尝试,但这应该可以解决问题,让您了解如何通过xml嵌套进行编辑
foreach ($xml->issue as $issue){
foreach ($issue['custom_field'] as $custField){
echo $custField['value'];
}
}
您对选择所需
的键不是很明确
通过您的示例,我假设您希望选择
- 父级的
- 具有属性
和name=“NewTitle”
id=“6”
- 有一个
祖先和一个属性为id=“7”
xpath
是一个很好的解决方案,无需迭代即可直接获得该值。它类似于XML
的SQL
。
:
/issues/issue[tracker/@id='7']
注意/
是如何将父项与子项分开的,条件在[]
中,属性具有@
:
(...)/custom_fields/custom_field[@name='NewTitle'][@id='6']
子项(可以多于1个):
$xml = simplexml_load_string($x);
$values = $xml->xpath("/issues/issue[tracker/@id='7']/custom_fields/custom_field[@name='NewTitle'][@id='6']/value");
$values
是包含单个
节点的数组或空数组:
foreach ($values as $val)
echo $val->asXML();
输出:
<value>ABCDEF</value>
ABCDEF
请在操作中查看:您对选择所需的
的键不是很明确
通过您的示例,我假设您希望选择
- 父级的
- 具有属性
和name=“NewTitle”
id=“6”
- 有一个
祖先和一个属性为id=“7”
xpath
是一个很好的解决方案,无需迭代即可直接获得该值。它类似于XML
的SQL
。
:
/issues/issue[tracker/@id='7']
注意/
是如何将父项与子项分开的,条件在[]
中,属性具有@
:
(...)/custom_fields/custom_field[@name='NewTitle'][@id='6']
子项(可以多于1个):
$xml = simplexml_load_string($x);
$values = $xml->xpath("/issues/issue[tracker/@id='7']/custom_fields/custom_field[@name='NewTitle'][@id='6']/value");
$values
是包含单个
节点的数组或空数组:
foreach ($values as $val)
echo $val->asXML();
输出:
<value>ABCDEF</value>
ABCDEF
查看它的实际操作:user simplexml_load_string($XMLData)…然后您可以在任何级别上迭代xml标记user simplexml_load_string($XMLData)…然后您可以在任何级别上迭代xml标记