Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

XForms/Replace Tester

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Motivation You want to build a form that will allow you quickly test replacement regular expressions using XQuery's replace function. Screen Image frame|center|Replace Test Tool Before Submit frame|center|Replace Test Tool After Submit Link to Working Application Replace Test Sample Program <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ev="http://www.w3.org/2001/xml-events" > <head> <style type="text/css"> @namespace xf url("http://www.w3.org/2002/xforms"); body {font-family: Ariel, Helvetica, san-serif} /* Input controls appear on their own lines. */ xf|input, xf|select, xf|select1, xf|textarea {display:block; margin:5px 0;} /* Makes the labels right aligned in a 150px wide column that floats to the left of the input controls. */ xf|input > xf|label, xf|select > xf|label, xf|select1 > xf|label, xf|textarea > xf|label, xf|output > xf|label {font-weight: bold;text-align:right; padding-right:10px; width:150px; float:left; text-align:right;} /* make the input boxes a little wider */ .xf-value {width: 200px} </style> <xf:model> <xf:instance id="request" xmlns=""> <data> <input>abcdefghi</input> <pattern>def</pattern> <replacement>123</replacement> </data> </xf:instance> <xf:instance id="response" xmlns=""> <data/> </xf:instance> <xf:submission id="submit" method="get" action="http://localhost:8080/exist/rest/db/test/replace/replace.xq" replace="instance" instance="response" separator="&"> <xf:toggle case="case-busy" ev:event="xforms-submit" /> <xf:toggle case="case-submit-error" ev:event="xforms-submit-error" /> <xf:toggle case="case-done" ev:event="xforms-submit-done" /> </xf:submission> </xf:model> </head> <body> <h1>XForms Replace Tester</h1> <xf:input ref="input"> <xf:label>Input:</xf:label> </xf:input> <xf:input ref="pattern"> <xf:label>Pattern:</xf:label> </xf:input> <xf:input ref="replacement"> <xf:label>Replacement:</xf:label> </xf:input> <xf:switch> <xf:case id="ready"> <xf:submit submission="submit"> <xf:label>Submit</xf:label> </xf:submit> <xf:submit submission="echo-test"> <xf:label>Echo Test</xf:label> </xf:submit> </xf:case> <xf:case id="case-busy"> <p>Waiting for response...</p> </xf:case> <xf:case id="case-submit-error"> <p>The server has returned a submit error event.</p> </xf:case> <xf:case id="case-done"> <xf:output ref="instance('response')/replace-result/text()"> <xf:label>Result:</xf:label> </xf:output> </xf:case> </xf:switch> </body> </html> XQuery Replace Tester If you are using eXist, just place this file on the server in the same folder as your XForms test driver. In the example above I used a test folder on the localhost: http://localhost:8080/exist/rest/db/test/replace/replace.xq xquery version "1.0"; declare namespace exist = "http://exist.sourceforge.net/NS/exist"; declare namespace system="http://exist-db.org/xquery/system"; declare namespace request="http://exist-db.org/xquery/request"; declare option exist:serialize "method=xml media-type=text/xml indent=yes"; (: replace demo :) let $input := request:get-parameter('input', '') let $pattern := request:get-parameter('pattern', '') let $replacement := request:get-parameter('replacement', '') return <results> <input>{$input }</input> <pattern>{$pattern}</pattern> <replacement>{$replacement}</replacement> <replace-result>{replace($input , $pattern, $replacement)}</replace-result> </results> Discussion This shows that you can quickly built tools to teach yourself complex functions like regular expression handling. You can also use the XQuery match function with returns a true/false if the regular expression matches an input string. There are two variations of this example that are interesting. The first is where you replace the input form with a large text area for doing global replacements of large blocks of text. The second is where you replace the patten input box with a selection list with common replacement patterns. References Examples of replacement functions can be found here: w3c replace examples Process Step Editor Event Logger