How to get SOAP response data? - objective-c

This is the XML response back from webservice.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:OrientalServices1">
<SOAP-ENV:Body>
<ns1:Get_CategoryResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:responseGetCategoryByID[11]">
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">1</id>
<name xsi:type="xsd:string">國內</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">2</id>
<name xsi:type="xsd:string">財經</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">3</id>
<name xsi:type="xsd:string">社會</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">4</id>
<name xsi:type="xsd:string">國際</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">10</id>
<name xsi:type="xsd:string">龍門陣</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">11</id>
<name xsi:type="xsd:string">言論</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">6</id>
<name xsi:type="xsd:string">名家</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">8</id>
<name xsi:type="xsd:string">娛樂</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">5</id>
<name xsi:type="xsd:string">體育</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">7</id>
<name xsi:type="xsd:string">專題</name>
</item>
<item xsi:type="tns:responseGetCategoryByID">
<id xsi:type="xsd:int">9</id>
<name xsi:type="xsd:string">特輯</name>
</item>
</return>
</ns1:Get_CategoryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
In this XML, I got 11 items in an array. How can I deserialize it and get the item one by one?

You could use an XML parser.
There is support for a couple of methods in Cocoa - but since you've asked such a general question, all I can do is provide a general answer.
There is an Introduction to Event Driven XML Programming on the Apple Developer site

Related

Can we remove image preview from ui fileuploader?

Is it possible to remove image preview from UI fileuploder component, without using file component?
here is my code=>
<field name="file">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">string</item>
<item name="source" xsi:type="string">TestGroup</item>
<item name="label" xsi:type="string" translate="true">File</item>
<item name="visible" xsi:type="boolean">true</item>
<item name="formElement" xsi:type="string">fileUploader</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
<item name="previewTmpl" xsi:type="string">Vendor_Module/image-preview</item>
<item name="required" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="number">40</item>
<item name="uploaderConfig" xsi:type="array">
<item name="url" xsi:type="url" path="controller/index/upload"/>
</item>
</argument>
</field>
tried by removing item name= elementTmpl and previewTmpl but not working
can anybody help me to disable the image preview for fileupload.
Thanks in Advance.
Remove the src of image every time you click:
$("#input1").click(function () {
$('#imagepreview1').attr('src','');
});

XPATH: Filtering (rather than selecting nodes), preserving hierarachy

Given the following XML (with many hierarchy levels), I need to return the nodes after filtering all nodes with Hide"True" attribute and a certain name. Note that hide could be at any hierarchy level:
<items>
<item id="1" >
<item id="2" />
<item id="3" />
<item id="4" hide="true"/>
</item>
<item id="5" hide="true">
<item id="6" >
<item id="7">
<item id="8" hide="true"/>
<item id="9"/>
</item>
</item>
</items>
I would need to get this back:
<items>
<item id="1"">
<item id="2" />
<item id="3" />
</item>
<item id="6" >
<item id="7">
<item id="9"/>
</item>
</item>
</items>
The 'filtered' XML is then assigned to a treeview, so I need to preserve the hierarchical nature of the nodes. I have tried: "items//item[#hide='false' or not(#hide)]", but this returns a flattened (as well as duplicative) data, repeating nodes at the lower level pushed up to the top level as follows. Is there a way to use Xpath to do what I want? I understand that I can Xslt the data first, then display it, but it just seems that there is got to be an easier way. I am using c#/.net4.0 MSXML
<items>
<item id="1"">
<item id="2" />
<item id="3" />
</item>
<item id="6" >
<item id="7">
<item id="9"/>
</item>
</item>
<item id="2" />
<item id="3" />
<item id="7">
<item id="9"/>
</item>
<item id="9"/>
</items>

where and what is the error?

Site is running .NET 4.5, with VB. Uses SQLServer and ELMAH. I use VWD 2012.
Production site works fine, but local development site crashes with error:
"The specified string is not in the form required for an e-mail address."
when trying to load a page in the \Admin folder, which requires login.
The error comes up in VWD on a "Source Not Available" tab as soon as the login screen shows in the browser.
The error details are:
*System.FormatException was unhandled
HResult=-2146233033
Message=The specified string is not in the form required for an e-mail address.
Source=System
StackTrace:
at System.Net.Mail.MailAddressParser.ReadCfwsAndThrowIfIncomplete(String data, Int32 index)
at System.Net.Mail.MailAddressParser.ParseDomain(String data, Int32& index)
at System.Net.Mail.MailAddressParser.ParseAddress(String data, Boolean expectMultipleAddresses, Int32& index)
at System.Net.Mail.MailAddressParser.ParseAddress(String data)
at System.Net.Mail.MailAddress..ctor(String address, String displayName, Encoding displayNameEncoding)
at System.Net.Mail.MailMessage..ctor()
at Elmah.ErrorMailModule.ReportError(Error error)
at Elmah.ErrorMailModule.ReportError(Object state)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
InnerException:*
ELMAH stores the error in the AllXML field as:
<error
application="/VFA4"
host="DAVE-PC"
type="System.Web.HttpException"
message="File does not exist."
source="System.Web"
detail="System.Web.HttpException (0x80004005): File does not exist.
at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context, String overrideVirtualPath)
at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)"
time="2014-01-13T15:15:41.7894004Z"
statusCode="404">
<serverVariables>
<item
name="ALL_HTTP">
<value
string="HTTP_CONNECTION:keep-alive
HTTP_ACCEPT:*/*
HTTP_ACCEPT_ENCODING:gzip, deflate
HTTP_ACCEPT_LANGUAGE:en-US,en;q=0.8
HTTP_COOKIE:.ASPXANONYMOUS=YUThibsmzwEkAAAANWNhZGVjOTItNGQzNS00NmM3LTk3NjYtMTBkODAyYTBiODJhdYxJPubvb1GGRcsjrVicS0N3hCM1; VFA=ID=0&Name=Visitor&ACLSite=0&LoggedIn=false&Profile=0&Greeting=Visitor&Email=; FCOCRV.ASPXAUTH=2EB2E728E7546828599E7059AC071774F1B68DE36945B303364F8DE61A99F4DAEA1378B800DE77E4AD01EDCD1280072326E94CC7F9195A9AE1C8D5B829467129E14E9370F038922195F7D7FC6D7AB38936BBBC59C6C51B406783DA5C6D6567F00CB2B2AF25FD94881D778037C0EB183F8E009861; VFAanon=82GiHFGPKOy-L41M6_huRwSQi3a9FrKsTxn8DLe9u9G-5_4E45PebhWPaRXIcrD75UH17jCEDam8dBaRxfr7MOVXANsTmfdxLNxfGfGsWnq2y7yULGQg7BcCnFVfqmoMWOEp-w2; Violette=bIkdCP9-GSCYa2OhlgT3wakdXVcNXKlK1-VMT5WKlnHquMi7gMk3uIuXuEf87i7KZqH-13GVbwaqNV_7zj-pWgObGgZZPzUING_2tWJGlaLNkM4pUU6ttrVAdjyOn9bjTUBlDw2; __AntiXsrfToken=cde04d3ee0d74a9ba9af775e3dc13bb4
HTTP_HOST:localhost:60825
HTTP_REFERER:http://localhost:60825/VFA4/Account/Login?ReturnUrl=%2fVFA4%2fAdmin%2fAdm-VFAMembers.aspx
HTTP_USER_AGENT:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Safari/537.36
" />
</item>
<item
name="ALL_RAW">
<value
string="Connection: keep-alive
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: .ASPXANONYMOUS=YUThibsmzwEkAAAANWNhZGVjOTItNGQzNS00NmM3LTk3NjYtMTBkODAyYTBiODJhdYxJPubvb1GGRcsjrVicS0N3hCM1; VFA=ID=0&Name=Visitor&ACLSite=0&LoggedIn=false&Profile=0&Greeting=Visitor&Email=; FCOCRV.ASPXAUTH=2EB2E728E7546828599E7059AC071774F1B68DE36945B303364F8DE61A99F4DAEA1378B800DE77E4AD01EDCD1280072326E94CC7F9195A9AE1C8D5B829467129E14E9370F038922195F7D7FC6D7AB38936BBBC59C6C51B406783DA5C6D6567F00CB2B2AF25FD94881D778037C0EB183F8E009861; VFAanon=82GiHFGPKOy-L41M6_huRwSQi3a9FrKsTxn8DLe9u9G-5_4E45PebhWPaRXIcrD75UH17jCEDam8dBaRxfr7MOVXANsTmfdxLNxfGfGsWnq2y7yULGQg7BcCnFVfqmoMWOEp-w2; Violette=bIkdCP9-GSCYa2OhlgT3wakdXVcNXKlK1-VMT5WKlnHquMi7gMk3uIuXuEf87i7KZqH-13GVbwaqNV_7zj-pWgObGgZZPzUING_2tWJGlaLNkM4pUU6ttrVAdjyOn9bjTUBlDw2; __AntiXsrfToken=cde04d3ee0d74a9ba9af775e3dc13bb4
Host: localhost:60825
Referer: http://localhost:60825/VFA4/Account/Login?ReturnUrl=%2fVFA4%2fAdmin%2fAdm-VFAMembers.aspx
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Safari/537.36
" />
</item>
<item
name="APPL_MD_PATH">
<value
string="" />
</item>
<item
name="APPL_PHYSICAL_PATH">
<value
string="C:\inetpub\wwwroot\VFA4\" />
</item>
<item
name="AUTH_TYPE">
<value
string="" />
</item>
<item
name="AUTH_USER">
<value
string="" />
</item>
<item
name="AUTH_PASSWORD">
<value
string="*****" />
</item>
<item
name="LOGON_USER">
<value
string="DAVE-PC\Dave" />
</item>
<item
name="REMOTE_USER">
<value
string="" />
</item>
<item
name="CERT_COOKIE">
<value
string="" />
</item>
<item
name="CERT_FLAGS">
<value
string="" />
</item>
<item
name="CERT_ISSUER">
<value
string="" />
</item>
<item
name="CERT_KEYSIZE">
<value
string="" />
</item>
<item
name="CERT_SECRETKEYSIZE">
<value
string="" />
</item>
<item
name="CERT_SERIALNUMBER">
<value
string="" />
</item>
<item
name="CERT_SERVER_ISSUER">
<value
string="" />
</item>
<item
name="CERT_SERVER_SUBJECT">
<value
string="" />
</item>
<item
name="CERT_SUBJECT">
<value
string="" />
</item>
<item
name="CONTENT_LENGTH">
<value
string="0" />
</item>
<item
name="CONTENT_TYPE">
<value
string="" />
</item>
<item
name="GATEWAY_INTERFACE">
<value
string="" />
</item>
<item
name="HTTPS">
<value
string="" />
</item>
<item
name="HTTPS_KEYSIZE">
<value
string="" />
</item>
<item
name="HTTPS_SECRETKEYSIZE">
<value
string="" />
</item>
<item
name="HTTPS_SERVER_ISSUER">
<value
string="" />
</item>
<item
name="HTTPS_SERVER_SUBJECT">
<value
string="" />
</item>
<item
name="INSTANCE_ID">
<value
string="" />
</item>
<item
name="INSTANCE_META_PATH">
<value
string="" />
</item>
<item
name="LOCAL_ADDR">
<value
string="::1" />
</item>
<item
name="PATH_INFO">
<value
string="/VFA4/Account/Scripts/jquery.flexslider-min.js" />
</item>
<item
name="PATH_TRANSLATED">
<value
string="C:\inetpub\wwwroot\VFA4\Account\Scripts\jquery.flexslider-min.js" />
</item>
<item
name="QUERY_STRING">
<value
string="" />
</item>
<item
name="REMOTE_ADDR">
<value
string="::1" />
</item>
<item
name="REMOTE_HOST">
<value
string="::1" />
</item>
<item
name="REMOTE_PORT">
<value
string="" />
</item>
<item
name="REQUEST_METHOD">
<value
string="GET" />
</item>
<item
name="SCRIPT_NAME">
<value
string="/VFA4/Account/Scripts/jquery.flexslider-min.js" />
</item>
<item
name="SERVER_NAME">
<value
string="localhost" />
</item>
<item
name="SERVER_PORT">
<value
string="60825" />
</item>
<item
name="SERVER_PORT_SECURE">
<value
string="0" />
</item>
<item
name="SERVER_PROTOCOL">
<value
string="HTTP/1.1" />
</item>
<item
name="SERVER_SOFTWARE">
<value
string="" />
</item>
<item
name="URL">
<value
string="/VFA4/Account/Scripts/jquery.flexslider-min.js" />
</item>
<item
name="HTTP_CONNECTION">
<value
string="keep-alive" />
</item>
<item
name="HTTP_ACCEPT">
<value
string="*/*" />
</item>
<item
name="HTTP_ACCEPT_ENCODING">
<value
string="gzip, deflate" />
</item>
<item
name="HTTP_ACCEPT_LANGUAGE">
<value
string="en-US,en;q=0.8" />
</item>
<item
name="HTTP_COOKIE">
<value
string=".ASPXANONYMOUS=YUThibsmzwEkAAAANWNhZGVjOTItNGQzNS00NmM3LTk3NjYtMTBkODAyYTBiODJhdYxJPubvb1GGRcsjrVicS0N3hCM1; VFA=ID=0&Name=Visitor&ACLSite=0&LoggedIn=false&Profile=0&Greeting=Visitor&Email=; FCOCRV.ASPXAUTH=2EB2E728E7546828599E7059AC071774F1B68DE36945B303364F8DE61A99F4DAEA1378B800DE77E4AD01EDCD1280072326E94CC7F9195A9AE1C8D5B829467129E14E9370F038922195F7D7FC6D7AB38936BBBC59C6C51B406783DA5C6D6567F00CB2B2AF25FD94881D778037C0EB183F8E009861; VFAanon=82GiHFGPKOy-L41M6_huRwSQi3a9FrKsTxn8DLe9u9G-5_4E45PebhWPaRXIcrD75UH17jCEDam8dBaRxfr7MOVXANsTmfdxLNxfGfGsWnq2y7yULGQg7BcCnFVfqmoMWOEp-w2; Violette=bIkdCP9-GSCYa2OhlgT3wakdXVcNXKlK1-VMT5WKlnHquMi7gMk3uIuXuEf87i7KZqH-13GVbwaqNV_7zj-pWgObGgZZPzUING_2tWJGlaLNkM4pUU6ttrVAdjyOn9bjTUBlDw2; __AntiXsrfToken=cde04d3ee0d74a9ba9af775e3dc13bb4" />
</item>
<item
name="HTTP_HOST">
<value
string="localhost:60825" />
</item>
<item
name="HTTP_REFERER">
<value
string="http://localhost:60825/VFA4/Account/Login?ReturnUrl=%2fVFA4%2fAdmin%2fAdm-VFAMembers.aspx" />
</item>
<item
name="HTTP_USER_AGENT">
<value
string="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Safari/537.36" />
</item>
</serverVariables>
<cookies>
<item
name=".ASPXANONYMOUS">
<value
string="YUThibsmzwEkAAAANWNhZGVjOTItNGQzNS00NmM3LTk3NjYtMTBkODAyYTBiODJhdYxJPubvb1GGRcsjrVicS0N3hCM1" />
</item>
<item
name="VFA">
<value
string="ID=0&Name=Visitor&ACLSite=0&LoggedIn=false&Profile=0&Greeting=Visitor&Email=" />
</item>
<item
name="FCOCRV.ASPXAUTH">
<value
string="2EB2E728E7546828599E7059AC071774F1B68DE36945B303364F8DE61A99F4DAEA1378B800DE77E4AD01EDCD1280072326E94CC7F9195A9AE1C8D5B829467129E14E9370F038922195F7D7FC6D7AB38936BBBC59C6C51B406783DA5C6D6567F00CB2B2AF25FD94881D778037C0EB183F8E009861" />
</item>
<item
name="VFAanon">
<value
string="82GiHFGPKOy-L41M6_huRwSQi3a9FrKsTxn8DLe9u9G-5_4E45PebhWPaRXIcrD75UH17jCEDam8dBaRxfr7MOVXANsTmfdxLNxfGfGsWnq2y7yULGQg7BcCnFVfqmoMWOEp-w2" />
</item>
<item
name="Violette">
<value
string="bIkdCP9-GSCYa2OhlgT3wakdXVcNXKlK1-VMT5WKlnHquMi7gMk3uIuXuEf87i7KZqH-13GVbwaqNV_7zj-pWgObGgZZPzUING_2tWJGlaLNkM4pUU6ttrVAdjyOn9bjTUBlDw2" />
</item>
<item
name="__AntiXsrfToken">
<value
string="cde04d3ee0d74a9ba9af775e3dc13bb4" />
</item>
</cookies>
</error>
I cannot determine if the error is in the ELMAH process or in the underlying code somewhere. I have checked the email info in web.config related to ELMAH and all email addresses are properly formatted.
Everything had been working fine on the development machine until sometime in December, when all of a sudden this came up.

How to return a list of objects from soap webservice with rails

I'm using Savon to access a soap webservice, but I can only ever return a single result, when what I want is an array of results.
Here is my call:
response = client.call(:get_events, message: { username: "xxxx", password: "xxxxxxxx", company_code: "12TCE" })
I want 'response' to return all records with the company_code of "12TCE" and for me to be able to output them all doing something like:
response.to_hash[:get_events_response].each do |a|
a[:return][:item][:name]
end
How can I return all records and output as desired?
UPDATE 1:
This is the link to the wsdl: http://www.brrmedia.co.uk/webservices/event/index.php?wsdl
This is the response I get:
HTTPI POST request to www.brrmedia.co.uk (httpclient)
SOAP response (status 200)
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.brrmedia.co.uk/webservices/event" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getEventsResponse xmlns:ns1="http://www.brrmedia.co.uk/webservices/event">
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:objEvent[1]">
<item xsi:type="tns:objEvent">
<id xsi:type="xsd:int">119466</id>
<name xsi:type="xsd:string">blur Group - 2000 projects milestone</name>
<summary xsi:type="xsd:string"/>
<location xsi:type="xsd:string"/>
<date xsi:type="xsd:string">2013-12-17 11:30</date>
<link xsi:type="xsd:string">http://www.brrmedia.co.uk/event/119466/partner/brrsoap</link>
<company xsi:type="tns:objCompany">
<name xsi:type="xsd:string">blur Group</name>
<codes xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:objCompanyCode[1]">
<item xsi:type="tns:objCompanyCode">
<code xsi:type="xsd:string">BLUR</code>
<collection xsi:type="xsd:string">London Stock Exchange (AIM)</collection>
</item>
</codes>
<website xsi:type="xsd:string">http://www.blurgroup.com/</website>
<category xsi:type="xsd:string">Technology</category>
</company>
<presenter xsi:type="tns:objPresenter">
<name xsi:type="xsd:string"> Philip Letts</name>
<image xsi:type="xsd:string">http://www.brrmedia.co.uk/getimage/id/31215</image>
</presenter>
<media xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:objMediaItem[3]">
<item xsi:type="tns:objMediaItem">
<src xsi:type="xsd:string">http://s3-us-west-2.amazonaws.com/brr-streamguys/files/BLUR/blur20131217.pdf</src>
<duration xsi:type="xsd:string">00:00:00</duration>
<filesize xsi:type="xsd:string">380</filesize>
<media_type xsi:type="xsd:string">pdf</media_type>
</item>
<item xsi:type="tns:objMediaItem">
<src xsi:type="xsd:string">http://s3-us-west-2.amazonaws.com/brr-streamguys/files/BLUR/BLUR20131217</src>
<duration xsi:nil="true" xsi:type="xsd:string"/>
<filesize xsi:nil="true" xsi:type="xsd:string"/>
<media_type xsi:type="xsd:string">presimages</media_type>
</item>
<item xsi:type="tns:objMediaItem">
<src xsi:type="xsd:string">http://s3-us-west-2.amazonaws.com/brr-streamguys/files/BLUR/BLUR20131217editv1.mp3</src>
<duration xsi:type="xsd:string">00:07:54</duration>
<filesize xsi:type="xsd:string">5557</filesize>
<media_type xsi:type="xsd:string">audio</media_type>
</item>
</media>
<type xsi:type="xsd:string">audio</type>
<height xsi:type="xsd:int">900</height>
<width xsi:type="xsd:int">680</width>
</item>
</return>
</ns1:getEventsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

VXML Digits Grammar Excluding All Zeros

I'm looking for a way to build a VXML grammar that requires a certain number of digits to be entered, but also requires that the input is not all zeros.
The use case for this is bank numbers. For example, I would like to force an input (voice or DTMF, doesn't matter) of 9 digits for routing numbers but require that not all digits are zero. (Disregard the modulus check for the moment, I'm not concerned about that here).
Given the grammar constructs of <one-of> and <item>, I can see this being possible by enumerating all possibilities such as the rule at this end of this question. However, this seems ridiculous. Is there a better way that I haven't come across yet? Any help would be appreciated.
<rule>
<one-of>
<item>
<item repeat="1">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
<item repeat="8">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
</item>
<item>
<item repeat="1">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
<item repeat="1">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
<item repeat="7">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
</item>
<item>
<item repeat="2">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
<item repeat="1">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
<item repeat="6">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</item>
</item>
etc....
</one-of>
</rule>
How about something like this
<rule id="zero">
<oneof>
<item>0</item>
</oneof>
</rule>
<rule id="nonzero">
<oneof>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</oneof>
</rule>
<rule id="alldigits">
<oneof>
<item>
<ruleref uri="#zero"/>
</item>
<item>
<ruleref uri="#nonzero"/>
</item>
</oneof>
</rule>
<rule id="account-num">
<oneof>
<item>
<item repeat="7">
<ruleref uri="#alldigits"/>
</item>
<item repeat="1">
<ruleref uri="#nonzero"/>
</item>
</item>
</oneof>
</rule>
The rule account-num specifies that at least one number must not be zero.