我试图将XML转换为HTML,这是我试图解析的XML的一部分
<entry morerows="1">data 1</entry>
<entry morerows="2">data 2</entry>
<entry morerows="3">data 3</entry>
<entry morerows="4">data 4</entry>
这应该变成了
<td rowspan="2">data 1</td>
<td rowspan="3">data 2</td>
<td rowspan="4">data 3</td>
<td rowspan="5">data 4</td>
我尝试了以下代码但没有取得多大成功:
$content = preg_replace('/<entry morerows="([\d]+?)">/', '<tr '.('$1' + 1).'>' ,$content);
我无法用捕获组计算,所以我的问题是我如何捕获“morerows”属性值并将该值加1并用该替换当前值。 <entry>
标记的数量可以介于1到255之间。
答案 0 :(得分:4)
除了/ e修饰符,您还必须将替换部分重写为真实表达式。
preg_replace('/<entry morerows="([\d]+?)">/e',
' "<tr rowspan=" . ("$1" + 1) . ">" ',
请注意,单引号括起整个表达式。在双引号内使用(为了便于阅读)来构造另一个字符串。无关的空格在PHP上下文中,只有双引号内的字符串才会成为结果数据。
答案 1 :(得分:1)
您必须使用/ e修饰符来完成此操作(请参阅this codepad example - 请注意使用htmlentities()使视觉显示更加明显)。但是,在这里查看您的代码,您的问题似乎不太可能实际执行您想要的操作 - <td rowspan="2">data 1</td>
后跟<td rowspan="3">data 2</td>
不太可能做任何非常有吸引力的事情 - 您通常会想跳过后续行中的rowspanning列。我建议改为研究XSL,这将为您提供更灵活的语言来执行这种标记匹配和重写 - 请参阅PHP's XSL documentation了解更多信息。
答案 2 :(得分:0)
你需要在preg_replace中为模式赋予'e'修饰符,以便将代码放在替换而不是文本中。