Php 从XML标记生成表单字段

Php 从XML标记生成表单字段,php,xml,forms,dynamic,input,Php,Xml,Forms,Dynamic,Input,我正试图找到一种利用PHP脚本的方法,该脚本将: 当链接指向时打开XML文档 单击该文档(从 HTML页面) 扫描XML文档中的标记 使用输入创建HTML表单 基于标记的字段 将输入数据发布回XML 在标签内(当表单 提交)并打印XML 到HTML 因此,如果我有一个如下的XML文件: <profile> Hello, my name is <name></name>. I am <age></age> years old. I l

我正试图找到一种利用PHP脚本的方法,该脚本将:

  • 当链接指向时打开XML文档 单击该文档(从 HTML页面)
  • 扫描XML文档中的标记
  • 使用输入创建HTML表单 基于标记的字段
  • 将输入数据发布回XML 在标签内(当表单 提交)并打印XML 到HTML
  • 因此,如果我有一个如下的XML文件:

    <profile>
    Hello, my name is <name></name>.  I am <age></age> years old.  I live in <place></place>
    </profile>
    
    
    你好,我的名字是。我今年岁了。我住在
    
    单击指向该文件的链接后,PHP将生成如下表单:

    <form> 
    Name:
    Age:
    Place:
    </form>
    
    
    姓名:
    年龄:
    地点:
    
    然后在填写并提交表格后(假设此人是25岁的Joel,来自波士顿),以下内容将写入屏幕:

    你好,我叫乔尔。我今年25岁。我住在波士顿

    任何代码或指向优秀教程的点都将不胜感激

    THX


    E.

    如果占位符的格式始终为
    ,则可以使用正则表达式或简单的字符串搜索进行搜索,生成表单字段,然后对原始占位符执行字符串查找/替换以获得合并版本。这可能比通过XML解析方法更容易,因为XML标记之间的内容将被解析为内容节点


    为此,我将使用一个占位符,如
    %Name%
    $Name$
    ,而不是XML标记,因为这样您就可以使用简单的字符串匹配方法对其进行解析,而不会干扰整个XML结构。

    您应该为此使用XSLT

    使用浏览器:

    xml:

    
    你好,我的名字是。我今年岁了。我住在
    
    xsl:

    
    : 
    
    输出:

    <form>
        <label>name: <input type="text" name="name"></label><br />
        <label>age: <input type="text" name="age"></label><br />
        <label>place: <input type="text" name="place"></label><br />
    </form>
    
    
    名称:
    年龄:
    地点:

    您可以使用php的xsl扩展。

    谢谢您的提示。我理解你所说的关于使用占位符而不是标记的内容,并将记住这一点,但是,无论我使用哪种方法,我都不知道如何执行这些操作。我不太熟悉PHP或其命令/函数。因此,我真正需要知道的是从何处开始对这组特定操作进行编码。您可以从文档开始:,假设我已经花了大量时间搜索文档(官方文档和非官方文档),并且(可能是因为我自己缺乏创造力或智慧)尚未找到完成特定任务集的方法。我不想再浪费时间了,我想问一些人是否可以(不是为我编写代码,但可能使用一些语言引用)请解释这个过程在PHP可执行文件中是如何工作的;这绝对是一个正确的方向。太棒了!多么直接的回答
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="html"/>
    
        <xsl:template match="profile">
            <form>
                <xsl:for-each select="child::*">
                    <label>
                        <xsl:value-of select="name()"/>: 
                        <input name="{name()}" type="text" />
                    </label>
                    <br />
                </xsl:for-each>
            </form>
        </xsl:template>
    </xsl:stylesheet>
    
    <form>
        <label>name: <input type="text" name="name"></label><br />
        <label>age: <input type="text" name="age"></label><br />
        <label>place: <input type="text" name="place"></label><br />
    </form>