如何获取<![CDATA [values]]>内的值?使用php DOM。 这是我的xml中的一些代码。
<Destinations>
<Destination>
<![CDATA[Aghia Paraskevi, Skiatos, Greece]]]]>><![CDATA[
<CountryCode>GR</CountryCode>
</Destination>
<Destination>
<![CDATA[Amettla, Spain]]]]>><![CDATA[
<CountryCode>ES</CountryCode>
</Destination>
<Destination>
<![CDATA[Amoliani, Greece]]]]>><![CDATA[
<CountryCode>GR</CountryCode>
</Destination>
<Destination>
<![CDATA[Boblingen, Germany]]]]>><![CDATA[
<CountryCode>DE</CountryCode>
</Destination>
</Destinations>
答案 0 :(得分:31)
使用PHP DOM非常简单,与Javascript的DOM非常相似。
以下是重要的课程:
有一些主要方法和属性:
DOMDocument->load()
- 创建新的DOMDocument
后,在该对象上使用此方法从文件加载。DOMDocument->getElementsByTagName()
- 此方法返回文档中具有给定标记名称的所有元素的节点列表。然后你可以在这个列表上迭代(foreach
)。DOMNode->childNodes
- 节点的所有子节点的节点列表。 (请记住, CDATA 部分是一个节点!)DOMNode->nodeType
- 获取节点的type。 CDATA节点的类型为 XML_CDATA_SECTION_NODE ,这是一个值 4 的常量。DOMNode->textContent
- 获取任何节点的文本内容。 注意:您的CDATA部分格式错误。我不知道为什么在第一个中有一个额外的]]
,或者在行尾有一个未闭合的CDATA部分,但我认为它应该只是:
<![CDATA[Aghia Paraskevi, Skiatos, Greece]]>
将这一切放在一起我们:
Destination
个元素并遍历列表Destination
元素的所有子节点XML_CDATA_SECTION_NODE
echo
该节点的textContent
。<强>代码:强>
$doc = new DOMDocument();
$doc->load('test.xml');
$destinations = $doc->getElementsByTagName("Destination");
foreach ($destinations as $destination) {
foreach($destination->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
echo $child->textContent . "<br/>";
}
}
}
<强>结果:强>
Aghia Paraskevi,Skiatos,希腊
西班牙阿梅特拉 Amoliani,希腊
鲍勃林根,德国
答案 1 :(得分:10)
使用此:
$parseFile = simplexml_load_file($myXML,'SimpleXMLElement', LIBXML_NOCDATA)
和下一个:
foreach ($parseFile->yourNode as $node ){
etc...
}
答案 2 :(得分:3)
最简单方法
$xml = simplexml_load_string($xmlData, 'SimpleXMLElement', LIBXML_NOCDATA);
$xmlJson = json_encode($xml);
$xmlArr = json_decode($xmlJson, 1); // Returns associative array
答案 3 :(得分:2)
在解析PHP DOM元素之前使用替换CDATA,之后可以获取innerXml或innerHtml:
str_replace(array('<\![CDATA[',']]>'), '', $xml);
答案 4 :(得分:1)
我使用以下代码。 它不仅用
读取所有xml数据[edu12]
但也将xml对象转换为php关联数组。所以我们可以在数据上应用循环。
<![CDATA[values]] >
希望这对你有用。