我如何使用 php DOM 获取 内的值。
这是我的 xml 中的一些代码。
<Destinations>
<Destination>
<![CDATA[Aghia Paraskevi, Skiatos, Greece]]>
<CountryCode>GR</CountryCode>
</Destination>
<Destination>
<![CDATA[Amettla, Spain]]>
<CountryCode>ES</CountryCode>
</Destination>
<Destination>
<![CDATA[Amoliani, Greece]]>
<CountryCode>GR</CountryCode>
</Destination>
<Destination>
<![CDATA[Boblingen, Germany]]>
<CountryCode>DE</CountryCode>
</Destination>
</Destinations>
使用 PHP DOM 相当简单,并且与 Javascript 的 DOM 非常相似。
以下是重要的类:
-
DOMNode http://www.php.net/manual/en/class.domnode.php— 可在 XML/HTML 文档中遍历的任何内容的基类,包括文本节点、注释节点和CDATA节点
-
DOM元素 http://www.php.net/manual/en/class.domelement.php— 基类tags.
-
DOM文档 http://www.php.net/manual/en/class.domdocument.php— 文档的基类。包含加载/保存 XML 的方法,以及普通 DOM 文档方法(见下文)。
有一些主要的方法和属性:
-
DOMDocument->load() http://www.php.net/manual/en/domdocument.load.php— 创建新的后
DOMDocument
,在该对象上使用此方法从文件加载。
-
DOMDocument->getElementsByTagName() http://www.php.net/manual/en/domdocument.getelementsbytagname.php— 此方法返回文档中具有给定标签名称的所有元素的节点列表。然后你可以迭代(
foreach
)在此列表中。
-
DOMNode->childNodes http://www.php.net/manual/en/class.domnode.php#domnode.props.childnodes— 节点的所有子节点的节点列表。 (记住,一个CDATA部分是一个节点!)
-
DOMNode->nodeType http://www.php.net/manual/en/class.domnode.php#domnode.props.nodetype— 获取type http://www.php.net/manual/en/dom.constants.php一个节点的。 CDATA 节点具有类型XML_CDATA_SECTION_NODE,这是一个常数,其值为4.
-
DOMNode->textContent http://www.php.net/manual/en/class.domnode.php#domnode.props.textcontent— 获取任意节点的文本内容。
Note:您的 CDATA 部分格式错误。我不知道为什么有一个额外的]]
在第一个中,或者在行末尾有一个未封闭的 CDATA 部分,但我认为它应该简单地是:
<![CDATA[Aghia Paraskevi, Skiatos, Greece]]>
把这一切放在一起我们:
- 创建一个新的文档对象并加载 XML
- Get all
Destination
按标签名称排列元素并迭代列表
- 遍历每个节点的所有子节点
Destination
element
- 检查节点类型是否为
XML_CDATA_SECTION_NODE
- 如果是,
echo
the textContent
该节点的。
Code:
$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/>";
}
}
}
Result:
Agia Paraskevi, 斯基亚索斯, 希腊
阿梅特拉, 西班牙
希腊阿莫利亚尼岛
德国伯布林根
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)