我有一个特殊格式的xml文件,如何从中获取特定的标记值,例如,如果我想获得每个dict标记的旋转值。你可以看到每个dict的旋转值嵌套在嵌入dist标签的数组标签中。请指向正确的方向
<?xml version="1.0" encoding="UTF-8"?>
<pu version="1.0">
<dict>
<key>ID</key>
<string>C0AC8773-CEE6-4A12-9C69-320A1BDB7255</string>
<key>Items</key>
<array>
<dict>
<key>opacity</key>
<real>1</real>
<key>Thickness</key>
<real>0</real>
<key>repeat</key>
<false/>
<key>rotation</key>
<real>90</real>
</dict>
<dict>
<key>opacity</key>
<real>1</real>
<key>Thickness</key>
<real>0</real>
<key>repeat</key>
<false/>
<key>rotation</key>
<real>180</real>
</dict>
<dict>
<key>opacity</key>
<real>1</real>
<key>Thickness</key>
<real>0</real>
<key>repeat</key>
<false/>
<key>rotation</key>
<real>270</real>
</dict>
</array>
</dict>
</pu>
这是我到目前为止所尝试的
$dom = new DOMDocument;
$dom->load($path);
$array = $dom->getElementsByTagName('array');
foreach($array as $key)
{
print_r($key);
}
这将打印数组标签内的所有标签,但我只想要旋转值
答案 0 :(得分:1)
将这些XML数据粘贴到文件yourxmlfile.xml
上,并使用simplexml_load_file()
来解析XML数据。使用foreach
,您可以像这样循环。
<?php
$xml = simplexml_load_file('yourxmlfile.xml');
foreach ($xml->dict->array->dict as $tag)
{
if($tag[0]->key[3]=="rotation")
{
echo $tag[0]->real[2]."<br>";
}
}
<强> OUTPUT :
强>
90
180
270
答案 1 :(得分:0)
正如在另一个答案中所说,key
/ (value)
“配对”是奇怪的。但是,您也可以使用xPath:
$xml = new SimpleXMLElement($string);
$result = $xml->xpath("dict/array/dict/key[text()='rotation']/following-sibling::real");
while(list( , $node) = each($result)) {
echo 'dict/array/dict/rotation: ',$node,"\n";
}
给出了:
dict/array/dict/rotation: 90
dict/array/dict/rotation: 180
dict/array/dict/rotation: 270
答案 2 :(得分:0)
您可以使用XPath表达式完成它:
$dom = new DOMDocument;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//*[text()='rotation']/following-sibling::real/text()");
foreach ($nodes as $node) {
echo $node->nodeValue, PHP_EOL;
}
XPath表达式意味着:查找所有<real>
标记,后跟任何带有节点值rotation
的标记,并获取其节点值。 XPath表达式允许您更多地控制标记。您可以根据需要调整表达式。
输出:
90
180
270