Написание XML с простой формой HTML - PullRequest
1 голос
/ 01 сентября 2010

Есть ли способ использовать значение из формы в узлы 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 Ответ

2 голосов
/ 01 сентября 2010

Это преобразование :

<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, создает атрибут с тем же именем, и его значение равно , либо указанное пользователем (содержится в параметре строки запроса), либо если пользователь не сделал t указать значение для этого атрибута, а затем его текущее значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...