【问题标题】:Generating Form Fields from XML Tags从 XML 标签生成表单字段
【发布时间】:2011-07-03 23:14:33
【问题描述】:

我正在尝试找出一种利用 PHP 脚本的方法:

  1. 当链接到 单击该文档(从 HTML 页面)。
  2. 扫描 XML 文档中的标签。
  3. 使用输入创建 HTML 表单 基于标签的字段。
  4. 将输入数据发送回 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 岁的乔尔),屏幕上会显示以下内容:

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

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

谢谢

E.

【问题讨论】:

    标签: php xml forms dynamic input


    【解决方案1】:

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

    就此而言,我会使用 %Name%$Name$ 之类的占位符来代替 XML 标记,因为这样您就可以使用简单的字符串匹配方法对其进行解析,而不会影响整个 XML 结构。

    【讨论】:

    • 感谢您的提示。我理解您所说的使用占位符而不是标签的内容,并将记住这一点,但是,无论我使用哪种方法,我都不知道如何执行这些。我对 PHP 或其命令/函数不是很熟悉。所以我真正需要知道的是从哪里开始对这组特定操作进行编码。
    • 让我们假设我已经花费了大量时间搜索文档(官方的和非官方的)并且(也许是因为我自己缺乏创造力或智力)没有找到方法完成特定的一组任务。我试图不再浪费时间询问是否可以(不是为我编写代码,但可能使用一些语言参考),请解释这个过程如何在 PHP 可执行文件中工作。
    【解决方案2】:

    您应该为此使用 XSLT..

    使用浏览器:

    xml:

    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet href="test.xsl" type="text/xsl"?>
    <profile>
    Hello, my name is <name></name>.  I am <age></age> years old.  I live in <place></place>
    </profile>
    

    xsl:

    <?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>
    

    您可以使用 php 的 xsl 扩展。

    【讨论】:

    • 谢谢你,inf3rno;这绝对是朝着正确方向发展的一点。
    • 太棒了!多么直接的答案;)
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2021-08-27
    • 2013-09-03
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多