Php 如何从CDATA中提取数据

Php 如何从CDATA中提取数据,php,xml,cdata,Php,Xml,Cdata,我从XML中提取数据,一些标记以这种方式在CDATA中包含数据 <description><![CDATA[Changes (as compared to 8.17) include: Features: * Added a &#8216;Schema Optimizer&#8217; feature. Based on &#8220;procedure analyse()&#8221; it will propose alteratio

我从XML中提取数据,一些标记以这种方式在CDATA中包含数据

<description><![CDATA[Changes (as compared to 8.17) include:
Features:
    * Added a &#8216;Schema Optimizer&#8217; feature. Based on &#8220;procedure analyse()&#8221; it will propose alterations to data types for a table based on analysis on what data are stored in the table. The feature is available from INFO tab/HTML mode.  Refer to documentation for details.
    * A table can now be added [...]]]>
</description>


我已经在使用preq\u match从描述标记中提取数据。那么如何从CDATA中提取数据呢?

无论使用哪种语言,都不要使用正则表达式来解析XML—几乎肯定会出错。使用.

无论使用哪种语言,都不要使用正则表达式来解析XML—几乎肯定会出错。如果需要提取一组复杂的数据,则应使用和xpath

<?php
$string = <<<XML
<?xml version='1.0'?> 
<document>
 <title>Forty What?</title>
 <from>Joe</from>
 <to>Jane</to>
 <body>
  I know that's the answer -- but what's the question?
 </body>
</document>
XML;

$xml = simplexml_load_string($string);

var_dump($xml);
?>
因此,在您的情况下,您只需要在文档中导航,这比reg表达式更容易,不是吗?

如果需要提取一组复杂的数据,您应该使用和
xpath

<?php
$string = <<<XML
<?xml version='1.0'?> 
<document>
 <title>Forty What?</title>
 <from>Joe</from>
 <to>Jane</to>
 <body>
  I know that's the answer -- but what's the question?
 </body>
</document>
XML;

$xml = simplexml_load_string($string);

var_dump($xml);
?>

因此,在您的情况下,您只需要在文档中导航,这比reg表达式更容易,不是吗?

@Pavel Minaev是正确的,将正则表达式选项作为最后手段,对于xml始终使用xml解析器,您现在几乎可以在所有语言中找到xml解析器。e、 我通常使用DOMDocument在php中解析或创建xml。对于像我这样偶尔使用php的人来说,它非常简单易懂

e、 g您希望从以下xml中提取CDATA

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE message SYSTEM "https://www.abcd.com/dtds/AbcdefMessageXmlApi.dtd">
<message id="9002">
  <report>
    <![CDATA[id:50121515075540159 sub:001 text text text text text]]>
  </report>
  <number>353874181931</number>
</message>
执行此
$reprotation
变量后,应该包含所有文本,不要担心它不会包含丑陋的标记部分CDATA


快乐编码:)

@Pavel Minaev是正确的,将正则表达式选项作为最后手段,对于xml始终使用xml解析器,您现在几乎可以在所有语言中找到xml解析器。e、 我通常使用DOMDocument在php中解析或创建xml。对于像我这样偶尔使用php的人来说,它非常简单易懂

e、 g您希望从以下xml中提取CDATA

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE message SYSTEM "https://www.abcd.com/dtds/AbcdefMessageXmlApi.dtd">
<message id="9002">
  <report>
    <![CDATA[id:50121515075540159 sub:001 text text text text text]]>
  </report>
  <number>353874181931</number>
</message>
执行此
$reprotation
变量后,应该包含所有文本,不要担心它不会包含丑陋的标记部分CDATA

快乐编码:)