Listing 1: A Simple Hello World XForms (Hello World.html)

<?xml version="1.0" encoding="utf-8"?>
<html xmlns:fp="urn:formsplayer.com" xmlns="http://www.w3.org/1999/xhtml"
 xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:ev="http://www.w3.org/2001/xml-events">
	<head>
		<object width="0" height="0" id="FormsPlayer"
		 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58">
			<b>FormsPlayer has failed to load! Please check your installation.</b>
			<br />
		</object>
		<?import namespace="xforms" implementation="#FormsPlayer"?>
		<xforms:model id="default">
			<xforms:instance xmlns="">
				<data>
					<name/>
				</data>
			</xforms:instance>
			<xforms:submission action="output.xml" method="put" id="submit" />
		</xforms:model>
		<link rel="stylesheet" href="style.css" type="text/css" />
	</head>
	<body>
		<xforms:output>XForms Hello World Example</xforms:output>
		<xforms:input ref="/data/name">
			<xforms:label>What's your name: </xforms:label>
			<xforms:hint>Your name</xforms:hint>
		</xforms:input>

		<xforms:group>
			<xforms:submit submission="submit">
				<xforms:label>Write to Disk</xforms:label>
			</xforms:submit>
		</xforms:group>
</body>
</html>


Listing 2: XForms Style Sheet (style.css)

body {
  padding-left: 6px;
  color: black;
  font-family: verdana, arial, sans-serif;
  font-size: 10pt;
  background-color: white;
}
xforms\:label {
  font-weight: bold;
  font-size: 10pt;
  color: #0000FF;
  font-family: sans-serif;
}
xforms\:group {
  display: block;
}
xforms\:input {
	display: block; 
	margin-top: 4px; 
	margin-bottom: 4px; 
	margin-left: 20px; 
	width: 400px; 
	background-color: rgb(210,230,230);
}
xforms\:select1 {
	width: 400px; 
	background-color: rgb(210,230,230); 
	margin-top: 1px; 
	margin-bottom: 4px;
	margin-left: 20px; 
}
xforms\:repeat {
  margin: 5px;
  padding: 5px;
}
xforms\:trigger {
	margin-top: 4px;
}
xforms\:submit {
	margin-top: 4px;
}
.repeat-item { 
	display: list-item; 
	width: 660px; 
	border-top: 1px thin solid gray; 
	border-bottom: 1px thin solid gray; 
}
.repeat-index { 
	background-color: lightblue; 
}
.invalid { 
	background-color: #FFFF66; 
	width: 500px;
}


Listing 3: Amazon Web Service

XForms (AmazonXForms.html)

<?xml version="1.0" encoding="utf-8"?>
<html xmlns:fp="urn:formsplayer.com" xmlns="http://www.w3.org/1999/xhtml" 
xmlns:xforms="http://www.w3.org/2002/xforms" 
xmlns:ev="http://www.w3.org/2001/xml-events" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
 xmlns:tns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
	<head>
		<title>Amazon XForms Client</title>

		<!-- I'm using FormsPlayer as the XForms client engine. Have to make sure it's
		 installed first. -->
		<object width="0" height="0" id="FormsPlayer"
		 classid="CLSID:4D0ABA11-C5F0-4478-991A-375C4B648F58">
			<b>FormsPlayer has failed to load! Please check your installation.</b>
			<br />
		</object>
		<?import namespace="xforms" implementation="#FormsPlayer"?>

		<!--  The main form payload. It is this SOAP envelope that the XForms populates and
		 submits to Amazon -->
		<xforms:model id="SOAPEnvelope" functions="fp:HTMLserialise">
			<xforms:instance id="AmazonRequestPayload">
				<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
				xmlns:tns="http://webservices.amazon.com/AWSECommerceService/2005-10-05" 
				xmlns:xs="http://www.w3.org/2001/XMLSchema">
					<soap:Body>
						<tns:ItemSearch>
							<!-- Insert your own Amazon Access Key ID here. -->
							<tns:AWSAccessKeyId>01234567890ABCDEFGHI</tns:AWSAccessKeyId>
							<tns:Shared>

								<tns:Availability>Available</tns:Availability>
								<tns:Author>Dan Brown</tns:Author>
								<tns:Condition>All</tns:Condition>
								<tns:Keywords></tns:Keywords>
								<tns:MerchantId>All</tns:MerchantId>
								<tns:ResponseGroup>Medium</tns:ResponseGroup>
								<tns:SearchIndex>Books</tns:SearchIndex>
								<tns:Sort>relevancerank</tns:Sort>
								<tns:Title></tns:Title>
							</tns:Shared>
						</tns:ItemSearch>
					</soap:Body>
				</soap:Envelope>
			</xforms:instance>
			<xforms:submission method="post" mediatype="text/xml" replace="instance" 
			action="http://soap.amazon.com/onca/soap?Service=AWSECommerceService" 
			id="AmazonRequest">
				<xforms:toggle case="responseGUI" ev:event="xforms-submit-done" />
			</xforms:submission>
		</xforms:model>

		<!-- A model for internal use only. Populates the sort list-box with standard
		 values.  -->
		<xforms:model id="SortOptionsData">
			<xforms:instance>
				<options>
					<sortOption description="Relevance">relevancerank</sortOption>
					<sortOption description="Price">pricerank</sortOption>
					<sortOption description="Title">titlerank</sortOption>
				</options>
			</xforms:instance>
		</xforms:model>

		<link href="style.css" rel="stylesheet" />

	</head>
	<body>
		<xforms:switch id="switchView">
			<xforms:case id="requestGUI">

				<xforms:output>Amazon Book Search Criteria</xforms:output>

				<!-- Gather the book search criteria from the user and populate the linked
				 elements in the model -->
				<xforms:input ref="instance('AmazonRequestPayload')//tns:Title">
					<xforms:label>Title:    </xforms:label>
					<xforms:hint>Enter a title.</xforms:hint>
				</xforms:input>

				<xforms:input ref="instance('AmazonRequestPayload')//tns:Keywords">
					<xforms:label>Keywords: </xforms:label>
					<xforms:hint>Enter some keywords.</xforms:hint>
				</xforms:input>

				<xforms:input ref="instance('AmazonRequestPayload')//tns:Author">
					<xforms:label>Author:   </xforms:label>
					<xforms:hint>Enter an authors name.</xforms:hint>
				</xforms:input>

				<!--  Amazon will sort the data for us before returning the results. -->
				<xforms:select1 ref="instance('AmazonRequestPayload')//tns:Sort"
				 appearance="minimal">
					<xforms:label>Sort by: </xforms:label>
					<xforms:itemset nodeset="sortOption" model="SortOptionsData">
				          <xforms:value ref="." />
				          <xforms:label ref="@description" />
					</xforms:itemset>
				</xforms:select1>

				<xforms:group>
					<xforms:submit submission="AmazonRequest">
						<xforms:label>Search</xforms:label>
					</xforms:submit>
				</xforms:group>

			</xforms:case>

			<!-- If the request is valid, display what Amazon has found. -->
			<xforms:case id="responseGUI">

				<xforms:group>
					<xforms:output>Search Results</xforms:output>
				</xforms:group>

				 <xforms:repeat nodeset="*//tns:Item" id="searchItems">
				      <xforms:group>
					        <xforms:output ref="tns:ItemAttributes/tns:Author">
					          <xforms:label>Author: </xforms:label>
					        </xforms:output>

					        <xforms:output ref="tns:ItemAttributes/tns:Title">
					          <xforms:label> Title: </xforms:label>
					        </xforms:output>
					        <xforms:output
		value="concat(tns:OfferSummary/tns:LowestNewPrice/tns:CurrencyCode, 
		tns:OfferSummary/tns:LowestNewPrice/tns:FormattedPrice)">
					          <xforms:label> Price: </xforms:label>
					        </xforms:output>

					        <xforms:output ref="tns:ItemAttributes/tns:ISBN">
					          <xforms:label> ISBN: </xforms:label>
					        </xforms:output>				
				      </xforms:group>	
				</xforms:repeat>

				<xforms:group>
					<xforms:output value="concat('Showing the first ', count(*//tns:Item), '
					 items.')" />
				</xforms:group>

				<xforms:group>				
					<xforms:trigger>
				        <xforms:label>Search Again</xforms:label>
				          <xforms:toggle ev:event="DOMActivate" case="requestGUI" />
					</xforms:trigger>
				</xforms:group>

			</xforms:case>

		</xforms:switch>
	</body>
</html>