使用简单的HTML表单编写XML

时间:2010-09-01 15:57:19

标签: html xml xslt

有没有办法将表单中的值用于XML节点?提交此表单后,我希望表单字段中的值覆盖现有节点。

<html>
 <head></head>
 <body>
 <form id="myForm" method="POST">
 <input type="text" value="new XML node value here" />
 <input type="submit" onClick="function();"/>
 </form>
 </body>

提前致谢

1 个答案:

答案 0 :(得分:2)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 xmlns:ext="http://exslt.org/common">
 <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

  <xsl:param name="pqueryString">
   <s name="field1">Hello world!</s>
  </xsl:param>

  <xsl:variable name="vqs"
   select="msxsl:node-set($pqueryString)"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="input[@type='text']/@value">
   <xsl:attribute name="value">
     <xsl:value-of select=
      "../@value[not($vqs/s[@name = current()/../@name])]
      |
       $vqs/s[@name = current()/../@name]
      "/>
   </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档(更正提供的格式正确):

<html>
    <head></head>
    <body>
        <form id="myForm" method="POST">
            <input name="field1" type="text" value="default" />
            <input type="submit" onClick="function();"/>
        </form>
    </body>
</html>

生成想要的正确结果

<html>
    <head></head>
    <body>
        <form id="myForm" method="POST">
            <input name="field1" type="text" value="Hello world!"></input>
            <input type="submit" onClick="function();"></input>
        </form>
    </body>
</html>

请注意

  1. 使用身份规则按原样复制文档。

  2. HTTP请求的查询字符串作为名为pqueryString的外部参数传递。

  3. 此处使用的ext:node-set()扩展名在实践中不需要,因为该参数将在外部传递。

  4. 标识规则的唯一覆盖是针对名为value 的属性。

  5. 匹配@value的模板会创建一个名称相同的属性,其值是用户指定的属性(包含在查询字符串参数中),或者是user没有为此属性指定值,而是指定其当前值。