2014-09-05 78 views
0

我有一个问题。我想用php函数simplexml_load_string读取一个错误的xml格式,但是我得到空值,因为格式是worng。该XML的一部分:用字符串替换模式

<column name="price"><![CDATA[184.95]]></column> 
<column name="category"><![CDATA[Dames]]></column> 
<column name="subcategory"><![CDATA[Schoenen]]></column> 
<column name="stock"><![CDATA[1]]></column> 

我需要把它替换到这一点:

<price><![CDATA[184.95]]></price> 
<category><![CDATA[Dames]]></category> 
<subcategory><![CDATA[Schoenen]]></subcategory> 
<stock><![CDATA[1]]></stock> 

正确读取XML饲料。例如,是否可以用preg_match来代替?如何?

+1

XSLT是正是出于这个定义 - 转换一个XML到另一个。 – ThW 2014-09-05 16:47:49

+0

只有因为XML而没有必要获取空值。它看起来很好。你可能不知道如何访问它?只是评论不是你问错了方式,而是以一种对你想实现的方式起作用的方式解决编程问题(就像在你接受的答案中使用正则表达式一样)。它会是吗? – hakre 2014-09-08 12:20:05

回答

1

如何:

$str = preg_replace('#<column name="([^"]+)">(.+?)</column>#', '<$1>$2</$1>', $str); 
+0

嗨m42,这应该是解决方案,但它不工作。即使当我使用正则表达式测试程序http://regexpal.com/它不会突出显示字符串.. – 2014-09-05 11:38:29

+1

@BoPennings:请参阅我的编辑,我用'。+?'替换了'[^ <] +'。 – Toto 2014-09-05 11:46:59

+0

谢谢它的作品! – 2014-09-05 13:05:16

0

下面会做,但我认为你很可能与preg_replace做,看到这个链接:php preg_replace matches

preg_match_all('/<column name=\"([a-z]+)\">(.*)<\/column>/', $string, $matches); 

$string = ''; 
foreach($matches[1] as $key => $name) 
{ 
    $string .= "<{$name}>{$matches[2][$key]}</{$name}>\n"; 
}