使用.htm文件(包含XML)作为模板,然后保存原始格式


Use .htm file (containing XML) as a template then resave preserving original format

我目前有一个Snom XML文件(存储为filename.htm),我需要将其用作模板文件来生成特定的单个文件。

我试图使用get_file_contents和DOMDocument加载.htm,但是我要么在文档中丢失标签,要么丢失格式。

是否有一种方法可以加载文件的内容,替换模板占位符,然后保存新文件,保留格式和原始间距?

模板文件

<?xml version="1.0" encoding="utf-8" ?> 
<settings>
    <phone-settings e="2">
        <user_active idx="1" perm="R">on</user_active>
        <user_realname idx="1" perm="R">{Prefix}{Suffix}</user_realname>
        <user_pname idx="1" perm="R">{Prefix}{Suffix}</user_pname>
        <user_name idx="1" perm="R">{Prefix}{Suffix}</user_name>
        <phone_name idx="1" perm="R">{Prefix}{Suffix}</phone_name>
        <user_idle_text idx="1" perm="R">{Prefix}{Suffix}</user_idle_text>
        <idle_offhook idx="1" perm="R">on</idle_offhook>
        <offhook_dial_prompt idx="1" perm="R">off</offhook_dial_prompt>
    </phone-settings>
</settings>

要求的最终结果

<?xml version="1.0" encoding="utf-8" ?> 
<settings>
    <phone-settings e="2">
        <user_active idx="1" perm="R">on</user_active>
        <user_realname idx="1" perm="R">Phone 001</user_realname>
        <user_pname idx="1" perm="R">Phone 001</user_pname>
        <user_name idx="1" perm="R">Phone 001</user_name>
        <phone_name idx="1" perm="R">Phone 001</phone_name>
        <user_idle_text idx="1" perm="R">Phone 001</user_idle_text>
        <idle_offhook idx="1" perm="R">on</idle_offhook>
        <offhook_dial_prompt idx="1" perm="R">off</offhook_dial_prompt>
    </phone-settings>
</settings>

假设占位符是唯一的,并且没有在"非占位符"上下文中使用,那么一个简单的字符串操作就可以做到:

$xml = file_get_contents('template.xml');
$xml = str_replace('{Prefix}', 'Phone', $xml);
$xml = str_replace('{Suffix}', '001', $xml);
etc...
file_put_contents('parsed.xml, $xml);