php、regex、xml

php、regex、xml,php,xml,regex,Php,Xml,Regex,我有一些。。。xml文档如下所示: <file src="136090000-136100000"> <member id="136090000"> <Name> <![CDATA[DOSEKUN DANIEL ADETUNJI]]> </Name> <Email> <![CDATA[dosekun2

我有一些。。。xml文档如下所示:

<file src="136090000-136100000">
  <member id="136090000">
        <Name>
              <![CDATA[DOSEKUN DANIEL ADETUNJI]]>
              </Name>
        <Email>
              <![CDATA[dosekun2d200@yahoo.com]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:46:57 PM]]>
              </DateRegistration>
  </Member>
  <usafisMember id="136090001">
        <Name>
              <![CDATA[yoleida colina]]>
              </Name>
        <Email>
              <![CDATA[yole_g1972@hotmail.com]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:47:08 PM]]>
              </DateRegistration>
  </usafisMember>
  <usafisMember id="136090002">
        <Name>
              <![CDATA[Homero Valdovinos]]>
              </Name>
        <Email>
              <![CDATA[felicida2d_9091@hotmail.com]]>
              </Email>
        <DateRegistration>
              <![CDATA[10/19/2010 8:47:01 PM]]>
              </DateRegistration>
  </Member>

我需要提取成员id、姓名、电子邮件和日期注册,但正如您所看到的,xml的格式不是很好。我尝试使用简单的xml,它显然不起作用,但下面的正则表达式似乎不起作用。以下是我尝试的模式:

$pattern = "/<Name><\\!\\[CDATA\\[(.*)\\]\\]><\/Name>/";
preg_match_all($pattern, $xml_content, $matches);
$name = $matches[1][0][v];
echo " name is $name ";
$pattern=“/”;
preg_match_all($pattern,$xml_content,$matches);
$name=$matches[1][0][v];
echo“name是$name”;
使用正则表达式解析XML是非常困难的。使用专用的XML解析器。php有很多可用的工具。

使用正则表达式解析XML是非常有用的。使用专用的XML解析器。php有很多可用的工具。

$x=
    $x='<file src="136090000-136100000">
      <usafisMember id="136090000">
            <Name>
                  <![CDATA[DOSEKUN DANIEL ADETUNJI]]>
                  </Name>
            <Email>
                  <![CDATA[dosekun2d200@yahoo.com]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:46:57 PM]]>
                  </DateRegistration>
      </usafisMember>
      <usafisMember id="136090001">
            <Name>
                  <![CDATA[yoleida colina]]>
                  </Name>
            <Email>
                  <![CDATA[yole_g1972@hotmail.com]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:47:08 PM]]>
                  </DateRegistration>
      </usafisMember>
      <usafisMember id="136090002">
            <Name>
                  <![CDATA[Homero Valdovinos]]>
                  </Name>
            <Email>
                  <![CDATA[felicida2d_9091@hotmail.com]]>
                  </Email>
            <DateRegistration>
                  <![CDATA[10/19/2010 8:47:01 PM]]>
                  </DateRegistration>
      </usafisMember>
        </file>
    ';

    $xml = new SimpleXMLElement($x);



foreach ($xml->usafisMember as $usafisMember){
echo 'Name: '. $usafisMember->Name.'<br>';
}
'; $xml=新的simplexmlement($x); foreach($xml->usafisMember作为$usafisMember){ 回显“名称:”。$USAFISEMBER->Name。“
”; }
不得不添加关闭文件,但其他方面按预期工作 '; $xml=新的simplexmlement($x); foreach($xml->usafisMember作为$usafisMember){ 回显“名称:”。$USAFISEMBER->Name。“
”; }
必须添加关闭文件,但other wise按预期工作

使用XML解析器,如SimpleXML。很抱歉,这很明显,但为什么不使用?XML是否总是缺少关闭文件标记,或者是否存在任何其他无效的构造?我尝试过“$XML\u content=file\u get\u contents(“/var/www/html/XML/$file\u name”);///print\r($XML\u content)$xml=simplexml\u load\u file(“$xml\u content”);echo$xml->getName()。“
”;“下面是日志文件,使用xml解析器,如simplexml。很抱歉,很明显,但是为什么不使用呢?xml是否总是缺少结束文件标记,或者可能存在任何其他无效的构造?我尝试过“$xml\u content=file\u get\u contents(”/var/www/html/xml/$file_name”);//print_r($xml_content);$xml=simplexml_load_file($xml_content”);echo$xml->getName()。“
”;”下面是日志文件xml不能格式正确或格式不正确;它只能是有效的。如果它不是有效的XML,那么您应该找到XML,否则您将永远无法可靠地做到这一点。(在我看来,您的XML看起来不错,除了缺少结束标记。)XML的格式不能很好,也不能很好地格式化;它只能是有效的。如果它不是有效的XML,那么您应该找到有效的XML,否则您将永远无法可靠地做到这一点。(在我看来,您的XML看起来不错,除了缺少结束标记。)