php - 如何使用 php DOM 获取 <![CDATA[values]] > 中的值?

标签 php xml

如何使用 php DOM 在 <![CDATA[values]] > 中获取值。 这是我的 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 — 可以在 XML/HTML 文档中遍历的任何内容的基类,包括文本节点、注释节点和 CDATA 节点
  • DOMElement标签的基类。
  • DOMDocument — 文档的基类。包含加载/保存 XML 的方法,以及普通的 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]]>

我们将所有这些放在一起:

  1. 创建一个新的文档对象并加载 XML
  2. 通过标签名获取所有Destination元素并遍历列表
  3. 遍历每个 Destination 元素的所有子节点
  4. 检查节点类型是否为XML_CDATA_SECTION_NODE
  5. 如果是,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, Greece
Amettla, Spain
Amoliani, Greece
Boblingen, Germany

关于php - 如何使用 php DOM 获取 &lt;![CDATA[values]] > 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674322/

相关文章:

xml - 在powershell中循环遍历子文件夹

java - 使用java将excel数据解析为xml

php - 如何在 woocommerce 中获得免费送货的最低订购量

JavaScript消息系统加密

php - 如何将 var url 放入 JavaScript 中?

php cURL 返回全部小写

Java XML 解析

java - 元素类型 "property"的内容必须匹配

session - php-fpm 和 nginx session 问题

php - Symfony 多对多连接