使用PHP进行无格式的XML解析

时间:2011-01-16 00:56:54

标签: php xml-parsing

我有一个来自客户端的xml文件,但格式不正确。这个xml是用flash生成的,我没有源文件来添加任何标签。

有什么方法可以在PHP中打开xml文件,preg_replace带有“something”的标签并显示输出。

我尝试只打开php文件并阅读内容并显示输出,但没有像这样的换行符。

有没有办法读取xml并动态修改标签然后只是读取文件来显示内容?

示例xml内容 - 所以基本上信息在它自己的标签中,但没有像“”这样的父标签。知道如何才能显示所有这些信息?我想要显示

xxxxxx in
yyyyyy in [16:38] mr.xyz:hello
[16:38] mr.abc:hey
xxxxxx out

<?xml version="1.0" encoding="UTF-8"?>
<in>---xxxxxx in---</in>
<in>---yyyyyy in---</in>
<time>[16:38]</time> <user>mr.xyz</user><separator>:</separator> </content>hello</content>
<time>[16:38]</time> <user>mr.abc</user><separator>:</separator> </content>hey</content>
<out>---xxxxxx out--</out>

3 个答案:

答案 0 :(得分:0)

您可以使用类似jQuery的库来获取值。这是一个http://code.google.com/p/phpquery/wiki/Basics

答案 1 :(得分:0)

您可以执行类似的操作 - 然后使用php函数header( 'Content-type: text/xml' );将内容类型标头设置为XML,浏览器将其作为XML文档提供。

function replaceTag( $tag, $new, $content )
{
    if ( !preg_match( '/\<'.$tag.'(.*?)\>(.*?)\<\/'.$tag.'\>/i', $content ) )
    {
         return FALSE;
    }
    return preg_replace( '/\<'.$tag.'(.*?)\>(.*?)\<\/'.$tag.'\>/i', "<{$new}$1>$2</{$new}>", $content );
}

echo replaceTag( 'in', 'newIn', '<in>123</in>' ); // Should output <newIn>123</newIn>

修改 我可能误解了这个问题。如果您希望对XML输出的数据执行某些操作,我会引用PHP中的simplexml方法。有关它们的更多信息可以在这里找到; http://php.net/simplexml

答案 2 :(得分:0)

不要使用正则表达式进行xml解析。

使用PHP的SimpleXML类,

http://us3.php.net/manual/en/simplexml.examples-basic.php

如果xml格式不正确,或者您需要更高级的功能,请使用PHP DOM类,

http://www.php.net/manual/en/book.dom.php

其中一个可以解析xml,进行编辑,和/或在格式良好的文件中输出。