1*983afe33SPhil Shafer 2*983afe33SPhil ShaferExamples 3*983afe33SPhil Shafer======== 4*983afe33SPhil Shafer 5*983afe33SPhil ShaferUnit Test 6*983afe33SPhil Shafer--------- 7*983afe33SPhil Shafer 8*983afe33SPhil ShaferHere is one of the unit tests as an example:: 9*983afe33SPhil Shafer 10*983afe33SPhil Shafer int 11*983afe33SPhil Shafer main (int argc, char **argv) 12*983afe33SPhil Shafer { 13*983afe33SPhil Shafer static char base_grocery[] = "GRO"; 14*983afe33SPhil Shafer static char base_hardware[] = "HRD"; 15*983afe33SPhil Shafer struct item { 16*983afe33SPhil Shafer const char *i_title; 17*983afe33SPhil Shafer int i_sold; 18*983afe33SPhil Shafer int i_instock; 19*983afe33SPhil Shafer int i_onorder; 20*983afe33SPhil Shafer const char *i_sku_base; 21*983afe33SPhil Shafer int i_sku_num; 22*983afe33SPhil Shafer }; 23*983afe33SPhil Shafer struct item list[] = { 24*983afe33SPhil Shafer { "gum", 1412, 54, 10, base_grocery, 415 }, 25*983afe33SPhil Shafer { "rope", 85, 4, 2, base_hardware, 212 }, 26*983afe33SPhil Shafer { "ladder", 0, 2, 1, base_hardware, 517 }, 27*983afe33SPhil Shafer { "bolt", 4123, 144, 42, base_hardware, 632 }, 28*983afe33SPhil Shafer { "water", 17, 14, 2, base_grocery, 2331 }, 29*983afe33SPhil Shafer { NULL, 0, 0, 0, NULL, 0 } 30*983afe33SPhil Shafer }; 31*983afe33SPhil Shafer struct item list2[] = { 32*983afe33SPhil Shafer { "fish", 1321, 45, 1, base_grocery, 533 }, 33*983afe33SPhil Shafer }; 34*983afe33SPhil Shafer struct item *ip; 35*983afe33SPhil Shafer xo_info_t info[] = { 36*983afe33SPhil Shafer { "in-stock", "number", "Number of items in stock" }, 37*983afe33SPhil Shafer { "name", "string", "Name of the item" }, 38*983afe33SPhil Shafer { "on-order", "number", "Number of items on order" }, 39*983afe33SPhil Shafer { "sku", "string", "Stock Keeping Unit" }, 40*983afe33SPhil Shafer { "sold", "number", "Number of items sold" }, 41*983afe33SPhil Shafer { NULL, NULL, NULL }, 42*983afe33SPhil Shafer }; 43*983afe33SPhil Shafer int info_count = (sizeof(info) / sizeof(info[0])) - 1; 44*983afe33SPhil Shafer 45*983afe33SPhil Shafer argc = xo_parse_args(argc, argv); 46*983afe33SPhil Shafer if (argc < 0) 47*983afe33SPhil Shafer exit(EXIT_FAILURE); 48*983afe33SPhil Shafer 49*983afe33SPhil Shafer xo_set_info(NULL, info, info_count); 50*983afe33SPhil Shafer 51*983afe33SPhil Shafer xo_open_container_h(NULL, "top"); 52*983afe33SPhil Shafer 53*983afe33SPhil Shafer xo_open_container("data"); 54*983afe33SPhil Shafer xo_open_list("item"); 55*983afe33SPhil Shafer 56*983afe33SPhil Shafer for (ip = list; ip->i_title; ip++) { 57*983afe33SPhil Shafer xo_open_instance("item"); 58*983afe33SPhil Shafer 59*983afe33SPhil Shafer xo_emit("{L:Item} '{k:name/%s}':\n", ip->i_title); 60*983afe33SPhil Shafer xo_emit("{P: }{L:Total sold}: {n:sold/%u%s}\n", 61*983afe33SPhil Shafer ip->i_sold, ip->i_sold ? ".0" : ""); 62*983afe33SPhil Shafer xo_emit("{P: }{Lwc:In stock}{:in-stock/%u}\n", 63*983afe33SPhil Shafer ip->i_instock); 64*983afe33SPhil Shafer xo_emit("{P: }{Lwc:On order}{:on-order/%u}\n", 65*983afe33SPhil Shafer ip->i_onorder); 66*983afe33SPhil Shafer xo_emit("{P: }{L:SKU}: {q:sku/%s-000-%u}\n", 67*983afe33SPhil Shafer ip->i_sku_base, ip->i_sku_num); 68*983afe33SPhil Shafer 69*983afe33SPhil Shafer xo_close_instance("item"); 70*983afe33SPhil Shafer } 71*983afe33SPhil Shafer 72*983afe33SPhil Shafer xo_close_list("item"); 73*983afe33SPhil Shafer xo_close_container("data"); 74*983afe33SPhil Shafer 75*983afe33SPhil Shafer xo_open_container("data"); 76*983afe33SPhil Shafer xo_open_list("item"); 77*983afe33SPhil Shafer 78*983afe33SPhil Shafer for (ip = list2; ip->i_title; ip++) { 79*983afe33SPhil Shafer xo_open_instance("item"); 80*983afe33SPhil Shafer 81*983afe33SPhil Shafer xo_emit("{L:Item} '{:name/%s}':\n", ip->i_title); 82*983afe33SPhil Shafer xo_emit("{P: }{L:Total sold}: {n:sold/%u%s}\n", 83*983afe33SPhil Shafer ip->i_sold, ip->i_sold ? ".0" : ""); 84*983afe33SPhil Shafer xo_emit("{P: }{Lwc:In stock}{:in-stock/%u}\n", 85*983afe33SPhil Shafer ip->i_instock); 86*983afe33SPhil Shafer xo_emit("{P: }{Lwc:On order}{:on-order/%u}\n", 87*983afe33SPhil Shafer ip->i_onorder); 88*983afe33SPhil Shafer xo_emit("{P: }{L:SKU}: {q:sku/%s-000-%u}\n", 89*983afe33SPhil Shafer ip->i_sku_base, ip->i_sku_num); 90*983afe33SPhil Shafer 91*983afe33SPhil Shafer xo_close_instance("item"); 92*983afe33SPhil Shafer } 93*983afe33SPhil Shafer 94*983afe33SPhil Shafer xo_close_list("item"); 95*983afe33SPhil Shafer xo_close_container("data"); 96*983afe33SPhil Shafer 97*983afe33SPhil Shafer xo_close_container_h(NULL, "top"); 98*983afe33SPhil Shafer 99*983afe33SPhil Shafer return 0; 100*983afe33SPhil Shafer } 101*983afe33SPhil Shafer 102*983afe33SPhil ShaferText output:: 103*983afe33SPhil Shafer 104*983afe33SPhil Shafer % ./testxo --libxo text 105*983afe33SPhil Shafer Item 'gum': 106*983afe33SPhil Shafer Total sold: 1412.0 107*983afe33SPhil Shafer In stock: 54 108*983afe33SPhil Shafer On order: 10 109*983afe33SPhil Shafer SKU: GRO-000-415 110*983afe33SPhil Shafer Item 'rope': 111*983afe33SPhil Shafer Total sold: 85.0 112*983afe33SPhil Shafer In stock: 4 113*983afe33SPhil Shafer On order: 2 114*983afe33SPhil Shafer SKU: HRD-000-212 115*983afe33SPhil Shafer Item 'ladder': 116*983afe33SPhil Shafer Total sold: 0 117*983afe33SPhil Shafer In stock: 2 118*983afe33SPhil Shafer On order: 1 119*983afe33SPhil Shafer SKU: HRD-000-517 120*983afe33SPhil Shafer Item 'bolt': 121*983afe33SPhil Shafer Total sold: 4123.0 122*983afe33SPhil Shafer In stock: 144 123*983afe33SPhil Shafer On order: 42 124*983afe33SPhil Shafer SKU: HRD-000-632 125*983afe33SPhil Shafer Item 'water': 126*983afe33SPhil Shafer Total sold: 17.0 127*983afe33SPhil Shafer In stock: 14 128*983afe33SPhil Shafer On order: 2 129*983afe33SPhil Shafer SKU: GRO-000-2331 130*983afe33SPhil Shafer Item 'fish': 131*983afe33SPhil Shafer Total sold: 1321.0 132*983afe33SPhil Shafer In stock: 45 133*983afe33SPhil Shafer On order: 1 134*983afe33SPhil Shafer SKU: GRO-000-533 135*983afe33SPhil Shafer 136*983afe33SPhil ShaferJSON output:: 137*983afe33SPhil Shafer 138*983afe33SPhil Shafer % ./testxo --libxo json,pretty 139*983afe33SPhil Shafer "top": { 140*983afe33SPhil Shafer "data": { 141*983afe33SPhil Shafer "item": [ 142*983afe33SPhil Shafer { 143*983afe33SPhil Shafer "name": "gum", 144*983afe33SPhil Shafer "sold": 1412.0, 145*983afe33SPhil Shafer "in-stock": 54, 146*983afe33SPhil Shafer "on-order": 10, 147*983afe33SPhil Shafer "sku": "GRO-000-415" 148*983afe33SPhil Shafer }, 149*983afe33SPhil Shafer { 150*983afe33SPhil Shafer "name": "rope", 151*983afe33SPhil Shafer "sold": 85.0, 152*983afe33SPhil Shafer "in-stock": 4, 153*983afe33SPhil Shafer "on-order": 2, 154*983afe33SPhil Shafer "sku": "HRD-000-212" 155*983afe33SPhil Shafer }, 156*983afe33SPhil Shafer { 157*983afe33SPhil Shafer "name": "ladder", 158*983afe33SPhil Shafer "sold": 0, 159*983afe33SPhil Shafer "in-stock": 2, 160*983afe33SPhil Shafer "on-order": 1, 161*983afe33SPhil Shafer "sku": "HRD-000-517" 162*983afe33SPhil Shafer }, 163*983afe33SPhil Shafer { 164*983afe33SPhil Shafer "name": "bolt", 165*983afe33SPhil Shafer "sold": 4123.0, 166*983afe33SPhil Shafer "in-stock": 144, 167*983afe33SPhil Shafer "on-order": 42, 168*983afe33SPhil Shafer "sku": "HRD-000-632" 169*983afe33SPhil Shafer }, 170*983afe33SPhil Shafer { 171*983afe33SPhil Shafer "name": "water", 172*983afe33SPhil Shafer "sold": 17.0, 173*983afe33SPhil Shafer "in-stock": 14, 174*983afe33SPhil Shafer "on-order": 2, 175*983afe33SPhil Shafer "sku": "GRO-000-2331" 176*983afe33SPhil Shafer } 177*983afe33SPhil Shafer ] 178*983afe33SPhil Shafer }, 179*983afe33SPhil Shafer "data": { 180*983afe33SPhil Shafer "item": [ 181*983afe33SPhil Shafer { 182*983afe33SPhil Shafer "name": "fish", 183*983afe33SPhil Shafer "sold": 1321.0, 184*983afe33SPhil Shafer "in-stock": 45, 185*983afe33SPhil Shafer "on-order": 1, 186*983afe33SPhil Shafer "sku": "GRO-000-533" 187*983afe33SPhil Shafer } 188*983afe33SPhil Shafer ] 189*983afe33SPhil Shafer } 190*983afe33SPhil Shafer } 191*983afe33SPhil Shafer 192*983afe33SPhil ShaferXML output:: 193*983afe33SPhil Shafer 194*983afe33SPhil Shafer % ./testxo --libxo pretty,xml 195*983afe33SPhil Shafer <top> 196*983afe33SPhil Shafer <data> 197*983afe33SPhil Shafer <item> 198*983afe33SPhil Shafer <name>gum</name> 199*983afe33SPhil Shafer <sold>1412.0</sold> 200*983afe33SPhil Shafer <in-stock>54</in-stock> 201*983afe33SPhil Shafer <on-order>10</on-order> 202*983afe33SPhil Shafer <sku>GRO-000-415</sku> 203*983afe33SPhil Shafer </item> 204*983afe33SPhil Shafer <item> 205*983afe33SPhil Shafer <name>rope</name> 206*983afe33SPhil Shafer <sold>85.0</sold> 207*983afe33SPhil Shafer <in-stock>4</in-stock> 208*983afe33SPhil Shafer <on-order>2</on-order> 209*983afe33SPhil Shafer <sku>HRD-000-212</sku> 210*983afe33SPhil Shafer </item> 211*983afe33SPhil Shafer <item> 212*983afe33SPhil Shafer <name>ladder</name> 213*983afe33SPhil Shafer <sold>0</sold> 214*983afe33SPhil Shafer <in-stock>2</in-stock> 215*983afe33SPhil Shafer <on-order>1</on-order> 216*983afe33SPhil Shafer <sku>HRD-000-517</sku> 217*983afe33SPhil Shafer </item> 218*983afe33SPhil Shafer <item> 219*983afe33SPhil Shafer <name>bolt</name> 220*983afe33SPhil Shafer <sold>4123.0</sold> 221*983afe33SPhil Shafer <in-stock>144</in-stock> 222*983afe33SPhil Shafer <on-order>42</on-order> 223*983afe33SPhil Shafer <sku>HRD-000-632</sku> 224*983afe33SPhil Shafer </item> 225*983afe33SPhil Shafer <item> 226*983afe33SPhil Shafer <name>water</name> 227*983afe33SPhil Shafer <sold>17.0</sold> 228*983afe33SPhil Shafer <in-stock>14</in-stock> 229*983afe33SPhil Shafer <on-order>2</on-order> 230*983afe33SPhil Shafer <sku>GRO-000-2331</sku> 231*983afe33SPhil Shafer </item> 232*983afe33SPhil Shafer </data> 233*983afe33SPhil Shafer <data> 234*983afe33SPhil Shafer <item> 235*983afe33SPhil Shafer <name>fish</name> 236*983afe33SPhil Shafer <sold>1321.0</sold> 237*983afe33SPhil Shafer <in-stock>45</in-stock> 238*983afe33SPhil Shafer <on-order>1</on-order> 239*983afe33SPhil Shafer <sku>GRO-000-533</sku> 240*983afe33SPhil Shafer </item> 241*983afe33SPhil Shafer </data> 242*983afe33SPhil Shafer </top> 243*983afe33SPhil Shafer 244*983afe33SPhil ShaferHMTL output:: 245*983afe33SPhil Shafer 246*983afe33SPhil Shafer % ./testxo --libxo pretty,html 247*983afe33SPhil Shafer <div class="line"> 248*983afe33SPhil Shafer <div class="label">Item</div> 249*983afe33SPhil Shafer <div class="text"> '</div> 250*983afe33SPhil Shafer <div class="data" data-tag="name">gum</div> 251*983afe33SPhil Shafer <div class="text">':</div> 252*983afe33SPhil Shafer </div> 253*983afe33SPhil Shafer <div class="line"> 254*983afe33SPhil Shafer <div class="padding"> </div> 255*983afe33SPhil Shafer <div class="label">Total sold</div> 256*983afe33SPhil Shafer <div class="text">: </div> 257*983afe33SPhil Shafer <div class="data" data-tag="sold">1412.0</div> 258*983afe33SPhil Shafer </div> 259*983afe33SPhil Shafer <div class="line"> 260*983afe33SPhil Shafer <div class="padding"> </div> 261*983afe33SPhil Shafer <div class="label">In stock</div> 262*983afe33SPhil Shafer <div class="decoration">:</div> 263*983afe33SPhil Shafer <div class="padding"> </div> 264*983afe33SPhil Shafer <div class="data" data-tag="in-stock">54</div> 265*983afe33SPhil Shafer </div> 266*983afe33SPhil Shafer <div class="line"> 267*983afe33SPhil Shafer <div class="padding"> </div> 268*983afe33SPhil Shafer <div class="label">On order</div> 269*983afe33SPhil Shafer <div class="decoration">:</div> 270*983afe33SPhil Shafer <div class="padding"> </div> 271*983afe33SPhil Shafer <div class="data" data-tag="on-order">10</div> 272*983afe33SPhil Shafer </div> 273*983afe33SPhil Shafer <div class="line"> 274*983afe33SPhil Shafer <div class="padding"> </div> 275*983afe33SPhil Shafer <div class="label">SKU</div> 276*983afe33SPhil Shafer <div class="text">: </div> 277*983afe33SPhil Shafer <div class="data" data-tag="sku">GRO-000-415</div> 278*983afe33SPhil Shafer </div> 279*983afe33SPhil Shafer <div class="line"> 280*983afe33SPhil Shafer <div class="label">Item</div> 281*983afe33SPhil Shafer <div class="text"> '</div> 282*983afe33SPhil Shafer <div class="data" data-tag="name">rope</div> 283*983afe33SPhil Shafer <div class="text">':</div> 284*983afe33SPhil Shafer </div> 285*983afe33SPhil Shafer <div class="line"> 286*983afe33SPhil Shafer <div class="padding"> </div> 287*983afe33SPhil Shafer <div class="label">Total sold</div> 288*983afe33SPhil Shafer <div class="text">: </div> 289*983afe33SPhil Shafer <div class="data" data-tag="sold">85.0</div> 290*983afe33SPhil Shafer </div> 291*983afe33SPhil Shafer <div class="line"> 292*983afe33SPhil Shafer <div class="padding"> </div> 293*983afe33SPhil Shafer <div class="label">In stock</div> 294*983afe33SPhil Shafer <div class="decoration">:</div> 295*983afe33SPhil Shafer <div class="padding"> </div> 296*983afe33SPhil Shafer <div class="data" data-tag="in-stock">4</div> 297*983afe33SPhil Shafer </div> 298*983afe33SPhil Shafer <div class="line"> 299*983afe33SPhil Shafer <div class="padding"> </div> 300*983afe33SPhil Shafer <div class="label">On order</div> 301*983afe33SPhil Shafer <div class="decoration">:</div> 302*983afe33SPhil Shafer <div class="padding"> </div> 303*983afe33SPhil Shafer <div class="data" data-tag="on-order">2</div> 304*983afe33SPhil Shafer </div> 305*983afe33SPhil Shafer <div class="line"> 306*983afe33SPhil Shafer <div class="padding"> </div> 307*983afe33SPhil Shafer <div class="label">SKU</div> 308*983afe33SPhil Shafer <div class="text">: </div> 309*983afe33SPhil Shafer <div class="data" data-tag="sku">HRD-000-212</div> 310*983afe33SPhil Shafer </div> 311*983afe33SPhil Shafer <div class="line"> 312*983afe33SPhil Shafer <div class="label">Item</div> 313*983afe33SPhil Shafer <div class="text"> '</div> 314*983afe33SPhil Shafer <div class="data" data-tag="name">ladder</div> 315*983afe33SPhil Shafer <div class="text">':</div> 316*983afe33SPhil Shafer </div> 317*983afe33SPhil Shafer <div class="line"> 318*983afe33SPhil Shafer <div class="padding"> </div> 319*983afe33SPhil Shafer <div class="label">Total sold</div> 320*983afe33SPhil Shafer <div class="text">: </div> 321*983afe33SPhil Shafer <div class="data" data-tag="sold">0</div> 322*983afe33SPhil Shafer </div> 323*983afe33SPhil Shafer <div class="line"> 324*983afe33SPhil Shafer <div class="padding"> </div> 325*983afe33SPhil Shafer <div class="label">In stock</div> 326*983afe33SPhil Shafer <div class="decoration">:</div> 327*983afe33SPhil Shafer <div class="padding"> </div> 328*983afe33SPhil Shafer <div class="data" data-tag="in-stock">2</div> 329*983afe33SPhil Shafer </div> 330*983afe33SPhil Shafer <div class="line"> 331*983afe33SPhil Shafer <div class="padding"> </div> 332*983afe33SPhil Shafer <div class="label">On order</div> 333*983afe33SPhil Shafer <div class="decoration">:</div> 334*983afe33SPhil Shafer <div class="padding"> </div> 335*983afe33SPhil Shafer <div class="data" data-tag="on-order">1</div> 336*983afe33SPhil Shafer </div> 337*983afe33SPhil Shafer <div class="line"> 338*983afe33SPhil Shafer <div class="padding"> </div> 339*983afe33SPhil Shafer <div class="label">SKU</div> 340*983afe33SPhil Shafer <div class="text">: </div> 341*983afe33SPhil Shafer <div class="data" data-tag="sku">HRD-000-517</div> 342*983afe33SPhil Shafer </div> 343*983afe33SPhil Shafer <div class="line"> 344*983afe33SPhil Shafer <div class="label">Item</div> 345*983afe33SPhil Shafer <div class="text"> '</div> 346*983afe33SPhil Shafer <div class="data" data-tag="name">bolt</div> 347*983afe33SPhil Shafer <div class="text">':</div> 348*983afe33SPhil Shafer </div> 349*983afe33SPhil Shafer <div class="line"> 350*983afe33SPhil Shafer <div class="padding"> </div> 351*983afe33SPhil Shafer <div class="label">Total sold</div> 352*983afe33SPhil Shafer <div class="text">: </div> 353*983afe33SPhil Shafer <div class="data" data-tag="sold">4123.0</div> 354*983afe33SPhil Shafer </div> 355*983afe33SPhil Shafer <div class="line"> 356*983afe33SPhil Shafer <div class="padding"> </div> 357*983afe33SPhil Shafer <div class="label">In stock</div> 358*983afe33SPhil Shafer <div class="decoration">:</div> 359*983afe33SPhil Shafer <div class="padding"> </div> 360*983afe33SPhil Shafer <div class="data" data-tag="in-stock">144</div> 361*983afe33SPhil Shafer </div> 362*983afe33SPhil Shafer <div class="line"> 363*983afe33SPhil Shafer <div class="padding"> </div> 364*983afe33SPhil Shafer <div class="label">On order</div> 365*983afe33SPhil Shafer <div class="decoration">:</div> 366*983afe33SPhil Shafer <div class="padding"> </div> 367*983afe33SPhil Shafer <div class="data" data-tag="on-order">42</div> 368*983afe33SPhil Shafer </div> 369*983afe33SPhil Shafer <div class="line"> 370*983afe33SPhil Shafer <div class="padding"> </div> 371*983afe33SPhil Shafer <div class="label">SKU</div> 372*983afe33SPhil Shafer <div class="text">: </div> 373*983afe33SPhil Shafer <div class="data" data-tag="sku">HRD-000-632</div> 374*983afe33SPhil Shafer </div> 375*983afe33SPhil Shafer <div class="line"> 376*983afe33SPhil Shafer <div class="label">Item</div> 377*983afe33SPhil Shafer <div class="text"> '</div> 378*983afe33SPhil Shafer <div class="data" data-tag="name">water</div> 379*983afe33SPhil Shafer <div class="text">':</div> 380*983afe33SPhil Shafer </div> 381*983afe33SPhil Shafer <div class="line"> 382*983afe33SPhil Shafer <div class="padding"> </div> 383*983afe33SPhil Shafer <div class="label">Total sold</div> 384*983afe33SPhil Shafer <div class="text">: </div> 385*983afe33SPhil Shafer <div class="data" data-tag="sold">17.0</div> 386*983afe33SPhil Shafer </div> 387*983afe33SPhil Shafer <div class="line"> 388*983afe33SPhil Shafer <div class="padding"> </div> 389*983afe33SPhil Shafer <div class="label">In stock</div> 390*983afe33SPhil Shafer <div class="decoration">:</div> 391*983afe33SPhil Shafer <div class="padding"> </div> 392*983afe33SPhil Shafer <div class="data" data-tag="in-stock">14</div> 393*983afe33SPhil Shafer </div> 394*983afe33SPhil Shafer <div class="line"> 395*983afe33SPhil Shafer <div class="padding"> </div> 396*983afe33SPhil Shafer <div class="label">On order</div> 397*983afe33SPhil Shafer <div class="decoration">:</div> 398*983afe33SPhil Shafer <div class="padding"> </div> 399*983afe33SPhil Shafer <div class="data" data-tag="on-order">2</div> 400*983afe33SPhil Shafer </div> 401*983afe33SPhil Shafer <div class="line"> 402*983afe33SPhil Shafer <div class="padding"> </div> 403*983afe33SPhil Shafer <div class="label">SKU</div> 404*983afe33SPhil Shafer <div class="text">: </div> 405*983afe33SPhil Shafer <div class="data" data-tag="sku">GRO-000-2331</div> 406*983afe33SPhil Shafer </div> 407*983afe33SPhil Shafer <div class="line"> 408*983afe33SPhil Shafer <div class="label">Item</div> 409*983afe33SPhil Shafer <div class="text"> '</div> 410*983afe33SPhil Shafer <div class="data" data-tag="name">fish</div> 411*983afe33SPhil Shafer <div class="text">':</div> 412*983afe33SPhil Shafer </div> 413*983afe33SPhil Shafer <div class="line"> 414*983afe33SPhil Shafer <div class="padding"> </div> 415*983afe33SPhil Shafer <div class="label">Total sold</div> 416*983afe33SPhil Shafer <div class="text">: </div> 417*983afe33SPhil Shafer <div class="data" data-tag="sold">1321.0</div> 418*983afe33SPhil Shafer </div> 419*983afe33SPhil Shafer <div class="line"> 420*983afe33SPhil Shafer <div class="padding"> </div> 421*983afe33SPhil Shafer <div class="label">In stock</div> 422*983afe33SPhil Shafer <div class="decoration">:</div> 423*983afe33SPhil Shafer <div class="padding"> </div> 424*983afe33SPhil Shafer <div class="data" data-tag="in-stock">45</div> 425*983afe33SPhil Shafer </div> 426*983afe33SPhil Shafer <div class="line"> 427*983afe33SPhil Shafer <div class="padding"> </div> 428*983afe33SPhil Shafer <div class="label">On order</div> 429*983afe33SPhil Shafer <div class="decoration">:</div> 430*983afe33SPhil Shafer <div class="padding"> </div> 431*983afe33SPhil Shafer <div class="data" data-tag="on-order">1</div> 432*983afe33SPhil Shafer </div> 433*983afe33SPhil Shafer <div class="line"> 434*983afe33SPhil Shafer <div class="padding"> </div> 435*983afe33SPhil Shafer <div class="label">SKU</div> 436*983afe33SPhil Shafer <div class="text">: </div> 437*983afe33SPhil Shafer <div class="data" data-tag="sku">GRO-000-533</div> 438*983afe33SPhil Shafer </div> 439*983afe33SPhil Shafer 440*983afe33SPhil ShaferHTML output with xpath and info flags:: 441*983afe33SPhil Shafer 442*983afe33SPhil Shafer % ./testxo --libxo pretty,html,xpath,info 443*983afe33SPhil Shafer <div class="line"> 444*983afe33SPhil Shafer <div class="label">Item</div> 445*983afe33SPhil Shafer <div class="text"> '</div> 446*983afe33SPhil Shafer <div class="data" data-tag="name" 447*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 448*983afe33SPhil Shafer data-help="Name of the item">gum</div> 449*983afe33SPhil Shafer <div class="text">':</div> 450*983afe33SPhil Shafer </div> 451*983afe33SPhil Shafer <div class="line"> 452*983afe33SPhil Shafer <div class="padding"> </div> 453*983afe33SPhil Shafer <div class="label">Total sold</div> 454*983afe33SPhil Shafer <div class="text">: </div> 455*983afe33SPhil Shafer <div class="data" data-tag="sold" 456*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 457*983afe33SPhil Shafer data-help="Number of items sold">1412.0</div> 458*983afe33SPhil Shafer </div> 459*983afe33SPhil Shafer <div class="line"> 460*983afe33SPhil Shafer <div class="padding"> </div> 461*983afe33SPhil Shafer <div class="label">In stock</div> 462*983afe33SPhil Shafer <div class="decoration">:</div> 463*983afe33SPhil Shafer <div class="padding"> </div> 464*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 465*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 466*983afe33SPhil Shafer data-help="Number of items in stock">54</div> 467*983afe33SPhil Shafer </div> 468*983afe33SPhil Shafer <div class="line"> 469*983afe33SPhil Shafer <div class="padding"> </div> 470*983afe33SPhil Shafer <div class="label">On order</div> 471*983afe33SPhil Shafer <div class="decoration">:</div> 472*983afe33SPhil Shafer <div class="padding"> </div> 473*983afe33SPhil Shafer <div class="data" data-tag="on-order" 474*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 475*983afe33SPhil Shafer data-help="Number of items on order">10</div> 476*983afe33SPhil Shafer </div> 477*983afe33SPhil Shafer <div class="line"> 478*983afe33SPhil Shafer <div class="padding"> </div> 479*983afe33SPhil Shafer <div class="label">SKU</div> 480*983afe33SPhil Shafer <div class="text">: </div> 481*983afe33SPhil Shafer <div class="data" data-tag="sku" 482*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 483*983afe33SPhil Shafer data-help="Stock Keeping Unit">GRO-000-415</div> 484*983afe33SPhil Shafer </div> 485*983afe33SPhil Shafer <div class="line"> 486*983afe33SPhil Shafer <div class="label">Item</div> 487*983afe33SPhil Shafer <div class="text"> '</div> 488*983afe33SPhil Shafer <div class="data" data-tag="name" 489*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 490*983afe33SPhil Shafer data-help="Name of the item">rope</div> 491*983afe33SPhil Shafer <div class="text">':</div> 492*983afe33SPhil Shafer </div> 493*983afe33SPhil Shafer <div class="line"> 494*983afe33SPhil Shafer <div class="padding"> </div> 495*983afe33SPhil Shafer <div class="label">Total sold</div> 496*983afe33SPhil Shafer <div class="text">: </div> 497*983afe33SPhil Shafer <div class="data" data-tag="sold" 498*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 499*983afe33SPhil Shafer data-help="Number of items sold">85.0</div> 500*983afe33SPhil Shafer </div> 501*983afe33SPhil Shafer <div class="line"> 502*983afe33SPhil Shafer <div class="padding"> </div> 503*983afe33SPhil Shafer <div class="label">In stock</div> 504*983afe33SPhil Shafer <div class="decoration">:</div> 505*983afe33SPhil Shafer <div class="padding"> </div> 506*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 507*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 508*983afe33SPhil Shafer data-help="Number of items in stock">4</div> 509*983afe33SPhil Shafer </div> 510*983afe33SPhil Shafer <div class="line"> 511*983afe33SPhil Shafer <div class="padding"> </div> 512*983afe33SPhil Shafer <div class="label">On order</div> 513*983afe33SPhil Shafer <div class="decoration">:</div> 514*983afe33SPhil Shafer <div class="padding"> </div> 515*983afe33SPhil Shafer <div class="data" data-tag="on-order" 516*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 517*983afe33SPhil Shafer data-help="Number of items on order">2</div> 518*983afe33SPhil Shafer </div> 519*983afe33SPhil Shafer <div class="line"> 520*983afe33SPhil Shafer <div class="padding"> </div> 521*983afe33SPhil Shafer <div class="label">SKU</div> 522*983afe33SPhil Shafer <div class="text">: </div> 523*983afe33SPhil Shafer <div class="data" data-tag="sku" 524*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 525*983afe33SPhil Shafer data-help="Stock Keeping Unit">HRD-000-212</div> 526*983afe33SPhil Shafer </div> 527*983afe33SPhil Shafer <div class="line"> 528*983afe33SPhil Shafer <div class="label">Item</div> 529*983afe33SPhil Shafer <div class="text"> '</div> 530*983afe33SPhil Shafer <div class="data" data-tag="name" 531*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 532*983afe33SPhil Shafer data-help="Name of the item">ladder</div> 533*983afe33SPhil Shafer <div class="text">':</div> 534*983afe33SPhil Shafer </div> 535*983afe33SPhil Shafer <div class="line"> 536*983afe33SPhil Shafer <div class="padding"> </div> 537*983afe33SPhil Shafer <div class="label">Total sold</div> 538*983afe33SPhil Shafer <div class="text">: </div> 539*983afe33SPhil Shafer <div class="data" data-tag="sold" 540*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 541*983afe33SPhil Shafer data-help="Number of items sold">0</div> 542*983afe33SPhil Shafer </div> 543*983afe33SPhil Shafer <div class="line"> 544*983afe33SPhil Shafer <div class="padding"> </div> 545*983afe33SPhil Shafer <div class="label">In stock</div> 546*983afe33SPhil Shafer <div class="decoration">:</div> 547*983afe33SPhil Shafer <div class="padding"> </div> 548*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 549*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 550*983afe33SPhil Shafer data-help="Number of items in stock">2</div> 551*983afe33SPhil Shafer </div> 552*983afe33SPhil Shafer <div class="line"> 553*983afe33SPhil Shafer <div class="padding"> </div> 554*983afe33SPhil Shafer <div class="label">On order</div> 555*983afe33SPhil Shafer <div class="decoration">:</div> 556*983afe33SPhil Shafer <div class="padding"> </div> 557*983afe33SPhil Shafer <div class="data" data-tag="on-order" 558*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 559*983afe33SPhil Shafer data-help="Number of items on order">1</div> 560*983afe33SPhil Shafer </div> 561*983afe33SPhil Shafer <div class="line"> 562*983afe33SPhil Shafer <div class="padding"> </div> 563*983afe33SPhil Shafer <div class="label">SKU</div> 564*983afe33SPhil Shafer <div class="text">: </div> 565*983afe33SPhil Shafer <div class="data" data-tag="sku" 566*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 567*983afe33SPhil Shafer data-help="Stock Keeping Unit">HRD-000-517</div> 568*983afe33SPhil Shafer </div> 569*983afe33SPhil Shafer <div class="line"> 570*983afe33SPhil Shafer <div class="label">Item</div> 571*983afe33SPhil Shafer <div class="text"> '</div> 572*983afe33SPhil Shafer <div class="data" data-tag="name" 573*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 574*983afe33SPhil Shafer data-help="Name of the item">bolt</div> 575*983afe33SPhil Shafer <div class="text">':</div> 576*983afe33SPhil Shafer </div> 577*983afe33SPhil Shafer <div class="line"> 578*983afe33SPhil Shafer <div class="padding"> </div> 579*983afe33SPhil Shafer <div class="label">Total sold</div> 580*983afe33SPhil Shafer <div class="text">: </div> 581*983afe33SPhil Shafer <div class="data" data-tag="sold" 582*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 583*983afe33SPhil Shafer data-help="Number of items sold">4123.0</div> 584*983afe33SPhil Shafer </div> 585*983afe33SPhil Shafer <div class="line"> 586*983afe33SPhil Shafer <div class="padding"> </div> 587*983afe33SPhil Shafer <div class="label">In stock</div> 588*983afe33SPhil Shafer <div class="decoration">:</div> 589*983afe33SPhil Shafer <div class="padding"> </div> 590*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 591*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 592*983afe33SPhil Shafer data-help="Number of items in stock">144</div> 593*983afe33SPhil Shafer </div> 594*983afe33SPhil Shafer <div class="line"> 595*983afe33SPhil Shafer <div class="padding"> </div> 596*983afe33SPhil Shafer <div class="label">On order</div> 597*983afe33SPhil Shafer <div class="decoration">:</div> 598*983afe33SPhil Shafer <div class="padding"> </div> 599*983afe33SPhil Shafer <div class="data" data-tag="on-order" 600*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 601*983afe33SPhil Shafer data-help="Number of items on order">42</div> 602*983afe33SPhil Shafer </div> 603*983afe33SPhil Shafer <div class="line"> 604*983afe33SPhil Shafer <div class="padding"> </div> 605*983afe33SPhil Shafer <div class="label">SKU</div> 606*983afe33SPhil Shafer <div class="text">: </div> 607*983afe33SPhil Shafer <div class="data" data-tag="sku" 608*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 609*983afe33SPhil Shafer data-help="Stock Keeping Unit">HRD-000-632</div> 610*983afe33SPhil Shafer </div> 611*983afe33SPhil Shafer <div class="line"> 612*983afe33SPhil Shafer <div class="label">Item</div> 613*983afe33SPhil Shafer <div class="text"> '</div> 614*983afe33SPhil Shafer <div class="data" data-tag="name" 615*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 616*983afe33SPhil Shafer data-help="Name of the item">water</div> 617*983afe33SPhil Shafer <div class="text">':</div> 618*983afe33SPhil Shafer </div> 619*983afe33SPhil Shafer <div class="line"> 620*983afe33SPhil Shafer <div class="padding"> </div> 621*983afe33SPhil Shafer <div class="label">Total sold</div> 622*983afe33SPhil Shafer <div class="text">: </div> 623*983afe33SPhil Shafer <div class="data" data-tag="sold" 624*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 625*983afe33SPhil Shafer data-help="Number of items sold">17.0</div> 626*983afe33SPhil Shafer </div> 627*983afe33SPhil Shafer <div class="line"> 628*983afe33SPhil Shafer <div class="padding"> </div> 629*983afe33SPhil Shafer <div class="label">In stock</div> 630*983afe33SPhil Shafer <div class="decoration">:</div> 631*983afe33SPhil Shafer <div class="padding"> </div> 632*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 633*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 634*983afe33SPhil Shafer data-help="Number of items in stock">14</div> 635*983afe33SPhil Shafer </div> 636*983afe33SPhil Shafer <div class="line"> 637*983afe33SPhil Shafer <div class="padding"> </div> 638*983afe33SPhil Shafer <div class="label">On order</div> 639*983afe33SPhil Shafer <div class="decoration">:</div> 640*983afe33SPhil Shafer <div class="padding"> </div> 641*983afe33SPhil Shafer <div class="data" data-tag="on-order" 642*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 643*983afe33SPhil Shafer data-help="Number of items on order">2</div> 644*983afe33SPhil Shafer </div> 645*983afe33SPhil Shafer <div class="line"> 646*983afe33SPhil Shafer <div class="padding"> </div> 647*983afe33SPhil Shafer <div class="label">SKU</div> 648*983afe33SPhil Shafer <div class="text">: </div> 649*983afe33SPhil Shafer <div class="data" data-tag="sku" 650*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 651*983afe33SPhil Shafer data-help="Stock Keeping Unit">GRO-000-2331</div> 652*983afe33SPhil Shafer </div> 653*983afe33SPhil Shafer <div class="line"> 654*983afe33SPhil Shafer <div class="label">Item</div> 655*983afe33SPhil Shafer <div class="text"> '</div> 656*983afe33SPhil Shafer <div class="data" data-tag="name" 657*983afe33SPhil Shafer data-xpath="/top/data/item/name" data-type="string" 658*983afe33SPhil Shafer data-help="Name of the item">fish</div> 659*983afe33SPhil Shafer <div class="text">':</div> 660*983afe33SPhil Shafer </div> 661*983afe33SPhil Shafer <div class="line"> 662*983afe33SPhil Shafer <div class="padding"> </div> 663*983afe33SPhil Shafer <div class="label">Total sold</div> 664*983afe33SPhil Shafer <div class="text">: </div> 665*983afe33SPhil Shafer <div class="data" data-tag="sold" 666*983afe33SPhil Shafer data-xpath="/top/data/item/sold" data-type="number" 667*983afe33SPhil Shafer data-help="Number of items sold">1321.0</div> 668*983afe33SPhil Shafer </div> 669*983afe33SPhil Shafer <div class="line"> 670*983afe33SPhil Shafer <div class="padding"> </div> 671*983afe33SPhil Shafer <div class="label">In stock</div> 672*983afe33SPhil Shafer <div class="decoration">:</div> 673*983afe33SPhil Shafer <div class="padding"> </div> 674*983afe33SPhil Shafer <div class="data" data-tag="in-stock" 675*983afe33SPhil Shafer data-xpath="/top/data/item/in-stock" data-type="number" 676*983afe33SPhil Shafer data-help="Number of items in stock">45</div> 677*983afe33SPhil Shafer </div> 678*983afe33SPhil Shafer <div class="line"> 679*983afe33SPhil Shafer <div class="padding"> </div> 680*983afe33SPhil Shafer <div class="label">On order</div> 681*983afe33SPhil Shafer <div class="decoration">:</div> 682*983afe33SPhil Shafer <div class="padding"> </div> 683*983afe33SPhil Shafer <div class="data" data-tag="on-order" 684*983afe33SPhil Shafer data-xpath="/top/data/item/on-order" data-type="number" 685*983afe33SPhil Shafer data-help="Number of items on order">1</div> 686*983afe33SPhil Shafer </div> 687*983afe33SPhil Shafer <div class="line"> 688*983afe33SPhil Shafer <div class="padding"> </div> 689*983afe33SPhil Shafer <div class="label">SKU</div> 690*983afe33SPhil Shafer <div class="text">: </div> 691*983afe33SPhil Shafer <div class="data" data-tag="sku" 692*983afe33SPhil Shafer data-xpath="/top/data/item/sku" data-type="string" 693*983afe33SPhil Shafer data-help="Stock Keeping Unit">GRO-000-533</div> 694*983afe33SPhil Shafer </div> 695