我想用dom替换

时间:2018-04-09 04:08:50

标签: php dom xpath replace preg-replace

html代码

<meta charset="UTF-8">
 <script type="text/javascript">
 function test() {
  //...
 }
 </script>
 <table class=eee>
 <tr>
 <td>{$my_name}</td>
 <td>{$my_name}</td>
 <td>{$my_name}</td>
 </tr>
 </table>
 <div class=aaa>
    <ul>{$member}</ul>
     <li><img src="test1.com">{$good_list} </li>
     <li><img src="test2.com">{$good_list} / {$regdate}</li>
     <li><img src="test3.com">{$good_list} / {$regdate}</li>
 </div>
 <ul class="aaa">
 <li>{$good_list}</li>
  <li>{$good_list}</li>
 </ul>
 <div class="bbb">
         <li>{$user_name}</li>
 </div>
 <ul class='ccc'>
  <li>{$board_list}</li>
  <li>{$board_list}</li>
  <li>{$board_list}</li>
 </ul>
 <div class=ddd>
 <ul>
  <li>{$board_list}</li>
  <li>{$board_list}</li>
  <li>{$board_list}</li>
 </ul>
 </div>
 <ul class='hhh'>
  <li>{$regdate}</li>
  <li>{$regdate}</li>
  <li>{$regdate}</li>
  <li>{$regdate}</li>
  <li>{$regdate}</li>
 </ul>
 <div class="aaa">
   <li><img src="test.com">{$good_list} / : {$regdate}</li>
   <li><img src="test.com">{$good_list} / : {$regdate}</li>
   <li><img src="test.com">{$good_list} / : {$regdate}</li>
 </div>
 <div class='zzz'>
 <table>
 <tr>
  <td>num</td>
  <td>subject</td>
  <td>wdate</td>
 </tr>
 <tr>
  <td>{$num}</td>
  <td>{$list}</td>
  <td>{$regdate}</td>
 </tr>
 <tr>
  <td>{$num}</td>
  <td>{$list}</td>
  <td>{$regdate}</td>
 </tr>
 <tr>
  <td>{$num}</td>
  <td>{$list}</td>
  <td>{$regdate}</td>
 </tr>
 <tr>
  <td>{$num}</td>
  <td>{$list}</td>
  <td>{$regdate}</td>
 </tr>
 <tr>
  <td>{$num}</td>
  <td>{$list}</td>
  <td>{$regdate}</td>
 </tr>
</table>
</div>

我想替换

结果

<meta charset="UTF-8">
<script type="text/javascript">
 function test() {
 //...
 }
</script>
<table class=eee>
 <tr>
 <td>{$my_name[0]}</td>
 <td>{$my_name[1]}</td>
 <td>{$my_name[2]}</td>
 </tr>
</table>
<div class=aaa>
   <ul>{$member}</ul>
    <li><img src="test1.com">{$good_list[0]} </li>
    <li><img src="test2.com">{$good_list[1]} / {$regdate[1]}</li>
    <li><img src="test3.com">{$good_list[2]} / {$regdate[2]}</li>
 </div>
 <ul class="aaa">
  <li>{$good_list[0]}</li>
  <li>{$good_list[1]}</li>
 </ul>
 <div class="bbb">
   <li>{$user_name}</li>
 </div>
 <ul class='ccc'>
  <li>{$board_list[0]}</li>
  <li>{$board_list[1]}</li>
  <li>{$board_list[2]}</li>
 </ul>
 <div class=ddd>
 <ul>
  <li>{$board_list[0]}</li>
  <li>{$board_list[1]}</li>
  <li>{$board_list[2]}</li>
 </ul>
 </div>
 <ul class='hhh'>
  <li>{$regdate[0]}</li>
  <li>{$regdate[1]}</li>
  <li>{$regdate[2]}</li>
  <li>{$regdate[3]}</li>
  <li>{$regdate[4]}</li>
 </ul>
 <div class="aaa">
   <li><img src="test.com">{$good_list[0]} / : {$regdate[0]}</li>
   <li><img src="test.com">{$good_list[1]} / : {$regdate[1]}</li>
   <li><img src="test.com">{$good_list[2]} / : {$regdate[2]</li>
 </div>
 <div class='zzz'>
 <table>
 <tr>
 <td>num</td>
 <td>subject</td>
 <td>wdate</td>
 </tr>
 <tr>
 <td>{$num[0]}</td>
 <td>{$list[0]}</td>
 <td>{$regdate[0]}</td>
 </tr>
 <tr>
 <td>{$num[1]}</td>
 <td>{$list[1]}</td>
 <td>{$regdate[1]}</td>
 </tr>
 <tr>
 <td>{$num[2]}</td>
 <td>{$list[2]}</td>
 <td>{$regdate[2]}</td>
 </tr>
 <tr>
 <td>{$num[3]}</td>
 <td>{$list[3]}</td>
 <td>{$regdate[3]}</td>
 </tr>
 <tr>
 <td>{$num[4]}</td>
 <td>{$list[4]}</td>
 <td>{$regdate[4]}</td>
 </tr>
 </table>

我想要这个结果

我日夜都在努力解决这个问题,但我最终没有解决它。请你帮忙。 我很感激你的帮助。

在每个类区域中,我们希望根据类名转换子代码。

如果您可以使用xpath,query和getElementByTagName来获取输出,那将是很好的,但您也可以使用其他方法。

1 个答案:

答案 0 :(得分:0)

这是一个XSLT 3.0解决方案:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
  version="3.0">
  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="text()[normalize-space()]">
    <xsl:variable name="var" select="replace(., '^\{\$' || '([a-z_]+)' || '.*$', '$1')"/>
    <xsl:variable name="n">
      <xsl:number level="any" start-at="0" 
           count="text()[starts-with(.,'{$' || $var)]" from="*[@class]"/>
    </xsl:variable>
    <xsl:value-of select="replace(., '\{\$([a-z_]+)\}', 
      '{\$$1[' || $n || ']')"/>
  </xsl:template>
</xsl:stylesheet>

它要求输入是格式良好的XML,您可能需要在现有HTML上运行一个整洁的实用程序来实现它。