我目前有一个xml文件格式如下:
<SKUQuestions>
<SKUQuestion>
<Tag>FrontCamaraWorks</Tag>
<Question>Does the front Camera Work?</Question>
<Answer>Yes</Answer>
</SKUQuestion>
<SKUQuestion>
<Tag>BackCamaraWorks</Tag>
<Question>Does the Rear Camera Work?</Question>
<Answer>No</Answer>
</SKUQuestion>
</SKUQuestions>
我目前正在收到&#34;答案&#34;节点通过调用它在xml中出现的位置,例如:
$qFrontCameraWorks = $data['skuQuestions']->SKUQuestion[4];
$data['frontCameraWorks'] = str_replace("'", "\'", $qFrontCameraWorks->Answer);
我的问题是xml文件并不总是以相同的顺序来找我。
所以,我想要找到一种方法来查询&#34; SKUquestion&#34;节点如果&#34;标签&#34;是一回事它会返回&#34;答案&#34;的价值。同一个SKUquestion节点中的节点。
例如,如果标签是&#34; FrontCamaraWorks&#34;那么$ data [&#39; frontCameraWorks&#39;]是肯定的。
答案 0 :(得分:0)
您可以参考此链接了解详情:http://php.net/manual/en/function.simplexml-load-file.php。
我也给你一个例子供你理解。
将XML字符串($ buffer)转换为简化的数组ignore属性,并使用相同的名称对子元素进行分组:
function XML2Array(SimpleXMLElement $parent)
{
$array = array();
foreach ($parent as $name => $element) {
($node = & $array[$name])
&& (1 === count($node) ? $node = array($node) : 1)
&& $node = & $node[];
$node = $element->count() ? XML2Array($element) : trim($element);
}
return $array;
}
$xml = simplexml_load_string($buffer);
$array = XML2Array($xml);
$array = array($xml->getName() => $array);
Result:
Array
(
[SKUQuestions] => Array
(
[SKUQuestion] => Array
(
[Tag] =>
[Question] =>
[Answer] =>
)
)
)
然后,无论您的购买顺序如何,您都可以参考答案标签。我希望它会有所帮助。
答案 1 :(得分:0)
只需运行XPath查询表达式即可。作为信息,XPath是一种用于引用XML文档部分的声明性语言。 PHP的SimpleXMLElement类可以运行在数组中返回的XPath查询:
$xmlstr = "<SKUQuestions>
<SKUQuestion>
<Tag>FrontCamaraWorks</Tag>
<Question>Does the front Camera Work?</Question>
<Answer>Yes</Answer>
</SKUQuestion>
<SKUQuestion>
<Tag>BackCamaraWorks</Tag>
<Question>Does the Rear Camera Work?</Question>
<Answer>No</Answer>
</SKUQuestion>
</SKUQuestions>";
# LOAD STRING XML
$xml = new SimpleXMLElement($xmlstr);
# RUN XPATH QUERY
$queryResult = $xml->xpath('//SKUQuestion[Tag="FrontCamaraWorks"]/Answer');
# OUTPUT VALUE
echo $queryResult[0];
# Yes
或者,你可以使用PHP的DOMXPath使用query()
方法返回DOMNodelist
(不是数组):
# LOAD STRING XML
$xmldoc = new DOMDocument();
$xmldoc->loadXML($xmlstr);
# INITIALIZE AND RUN QUERY
$xpathvar = new DOMXPath($xmldoc);
$queryResult = $xpathvar->query('//SKUQuestion[Tag="FrontCamaraWorks"]/Answer');
# ITERATE DOM NODE LIST
foreach($queryResult as $result){
echo $result->nodeValue;
}
# Yes