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

2022-08-30 15:57:50

我怎样才能在<中获取价值![CDATA[values]] >使用 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>

答案 1

使用PHP DOM相当简单,并且与Javascript的DOM非常相似。

以下是重要的类:

  • DOMNode — 可在 XML/HTML 文档中遍历的任何内容(包括文本节点、注释节点和 CDATA 节点)的基类
  • DOMElement标记的基类。
  • DOMDocument — 文档的基类。包含加载/保存 XML 的方法,以及普通的 DOM 文档方法(见下文)。

有几种订书钉方法和属性:

: 您的 CDATA 部分格式不正确。我不知道为什么在第一个中有一个额外的内容,或者在行尾有一个未关闭的CDATA部分,但我认为它应该只是:]]

<![CDATA[Aghia Paraskevi, Skiatos, Greece]]>

把这些放在一起,我们:

  1. 创建新的文档对象并加载 XML
  2. 按标记名称获取所有元素并循环访问列表Destination
  3. 循环访问每个元素的所有子节点Destination
  4. 检查节点类型是否为XML_CDATA_SECTION_NODE
  5. 如果是,则该节点的 。echotextContent

法典:

$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, 希腊
Amettla, 西班牙
Amoliani, 希腊
Boblingen, 德国


答案 2

使用这个:

$parseFile = simplexml_load_file($myXML,'SimpleXMLElement', LIBXML_NOCDATA)

下一页:

foreach ($parseFile->yourNode as $node ){
etc...
}

推荐