dataschema-xml.mustache revision 819e90d415ed17d59af3a247b2ad9d6feb0c21b5
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<div class="intro">
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly <p>DataSchema.XML normalizes arbitrary XML data against a given schema into an object with known properties.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly <p><strong>Note:</strong> XML parsing currently has known issues on the Android WebKit browser.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly</div>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
819e90d415ed17d59af3a247b2ad9d6feb0c21b5Luke Smith<div class="example yui3-skin-sam">
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {{>dataschema-xml-source}}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly</div>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<p>In order to use DataSchema.XML, input data must be an XML document.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny DonnellyYUI().use("datatype-xml", "dataschema-xml", function(Y) {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly var data_in = Y.DataType.XML.parse('<root><session>34637542</session><category name="music" id="5"><results><song id="59672468"><title>I Kissed A Girl</title><rank>1</rank><artist id="30326214">Katy Perry</artist></song><song id="47973564"><title>Shake It</title><rank>2</rank><artist id="45575683">Metro Station</artist></song><song id="52207363"><title>Bleeding Love</title><rank>3</rank><artist id="37956508">Leona Lewis</artist></song></results></category></root>'),
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly schema = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "song",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly // Or simply ["title", "artist", "rank"]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [{key:"title"}, {key:"artist"}, {key:"rank"}]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly data_out = Y.DataSchema.XML.apply(schema, data_in));
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly alert(data_out);
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly});
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<p>The data itself can get fairly complex, with deeply nested nodes and values held in attributes. In your schema, you can use XPath notation to define these locations.</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny DonnellyYUI().use("datatype-xml", "dataschema-xml", function(Y) {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly var data_in = Y.DataType.XML.parse('<Response><Session>542235629</Session><Tracks start="1" count="10" total="98" errorCount="0" defaultSort="popularity+" description="Top 100 Tracks" name="Top 100 Tracks" ><Track id="59672468" rating="-1" title="I Kissed A Girl"><Artist id="30326214" rating="-1">Katy Perry</Artist><ItemInfo><ChartPosition last="26" this="1"/></ItemInfo></Track><Track id="47973564" rating="-1" title="Shake It"><Artist id="45575683" rating="-1">Metro Station</Artist><ItemInfo><ChartPosition last="27" this="2"/></ItemInfo></Track><Track id="52207363" rating="-1" title="Bleeding Love"><Artist id="37956508" rating="-1">Leona Lewis</Artist><ItemInfo><ChartPosition last="28" this="3"/></ItemInfo></Track></Tracks></Response>'),
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly schema = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly metaFields: {session:"//Session", total:"//Tracks/@total"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "//Track",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"song", locator:"@title"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"artist", locator:"Artist"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"rank", locator:"ItemInfo/ChartPosition/@this"}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly data_out = Y.DataSchema.XML.apply(schema, data_in));
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly alert(data_out);
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly});
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly<p>Nested schemas are supported as of version 3.1:</p>
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny DonnellyYUI().use("datatype-xml", "dataschema-xml", function(Y) {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly var data_in = Y.DataType.XML.parse('<desserts><dessert type="treat"><name>cupcake</name><flavors><flavor name="chocolate"/><flavor name="red velvet"/></flavors></dessert><dessert type="treat"><name>ice cream</name><flavors><flavor name="chocolate"/><flavor name="strawberry"/><flavor name="vanilla"/></flavors></dessert><dessert type="treat"><name>pie</name><flavors><flavor name="banana cream"/><flavor name="blueberry"/><flavor name="cherry"/></flavors></dessert><dessert type="beverage"><name>hot chocolate</name></dessert><dessert type="beverage"><name>port wine</name></dessert></desserts>'),
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly schema = {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "dessert",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"type", locator:"@type"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"name", locator:"name"},
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"flavors", schema: {
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultListLocator: "flavor",
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly resultFields: [
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly {key:"flavor", locator:"@name"}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly }}
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly ]
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly },
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly data_out = Y.DataSchema.XML.apply(schema, data_in));
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly alert(data_out);
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly});
8f9d94fb7812612dff92ce14a37dbcad4ff02c1cJenny Donnelly```