# jk_parse_xml v0.45 # Parses XML file with Textpattern. # Jeff Khonsary # http://jeffkhonsary.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuNDUiO3M6NjoiYXV0aG9yIjtzOjEzOiJKZWZm IEtob25zYXJ5IjtzOjEwOiJhdXRob3JfdXJpIjtzOjIzOiJodHRwOi8vamVmZmtob25zYXJ5 LmNvbSI7czoxMToiZGVzY3JpcHRpb24iO3M6MzM6IlBhcnNlcyBYTUwgZmlsZSB3aXRoIFRl eHRwYXR0ZXJuLiI7czo0OiJ0eXBlIjtpOjA7czo0OiJuYW1lIjtzOjEyOiJqa19wYXJzZV94 bWwiO3M6NDoiaGVscCI7czoyMTQ3OiIKICA8aDE+amtfcGFyc2VfeG1sPC9oMT4KCiAgPHA+ VGhpcyBwbHVnaW4gcHJvdmlkZXMgYSB2ZXJ5IGJhc2ljIHdheSBvZiBwYXJzaW5nIGFuIFhN TCBkb2N1bWVudCBvciBmZWVkIHRocm91Z2ggUEhQJ3MgYnVpbHQtaW4gRE9NIGZ1bmN0aW9u cy4gT25jZSB0aGUgZG9jdW1lbnQgaXMgbG9hZGVkLCBpdCBpcyB0cmFuZm9ybWVkIGludG8g YW4gYXJyYXksIGFuZCBvdXRwdXQgdXNpbmcgYSBzcGVjaWZpZWQgZm9ybS48L3A+CgogIDxw Pk5vdGUgdGhhdCB0byBsb2FkIGFuIGV4dGVybmFsIGZlZWQsIHRoaXMgcGx1Z2luIHJlcXVp cmVzIGVpdGhlciA8c3Ryb25nPmFsbG93X3VybF9mb3Blbjwvc3Ryb25nPiB0dXJuZWQgPGVt Pm9uPC9lbT4sIG9yIDxzdHJvbmc+Q1VSTDwvc3Ryb25nPiBlbmFibGVkLjwvcD48YnIvPjxi ci8+CgogIDxwPkZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czo8L3A+CgogIDxoMj5qa19wYXJz ZV94bWw8L2gyPgoKICA8cD5UaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHVzZWQgdG8gcGFy c2UgYW4gWE1MIGRvY3VtZW50LiBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGF0 dHJpYnV0ZXM6IDxlbT54bWw8L2VtPiwgPGVtPmxvY2FsX2ZpbGU8L2VtPiwgPGVtPnBhcmVu dHM8L2VtPiwgPGVtPmVsZW1lbnRzPC9lbT4sIDxlbT5mb3JtPC9lbT4sIDxlbT53cmFwdGFn PC9lbT4sIDxlbT5icmVhazwvZW0+LCA8ZW0+bGltaXQ8L2VtPiwgPGVtPmNhY2hldGltZTwv ZW0+LjwvcD4KCiAgIDxwPjxzdHJvbmc+eG1sPC9zdHJvbmc+OiBUaGUgbG9jYWwgb3IgcmVt b3RlIFhNTCBmaWxlIHRvIGJlIHBhcnNlZC4gSWYgYSBsb2NhbCBmaWxlIGlzIHVzZWQsIGEg Y29tcGxldGUgcGF0aCB0byB0aGUgZmlsZSBtdXN0IGJlIGdpdmVuIGFuZCB0aGUgPGVtPmxv Y2FsX2ZpbGU8L2VtPiBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gIjEiLjwvcD4KCiAgIDxw PjxzdHJvbmc+cGFyZW50czwvc3Ryb25nPjogVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBlbGVt ZW50IHdpdGhpbiB0aGUgWE1MIGZpbGUuIEZvciBleGFtcGxlLCB5b3Ugd291bGQgdXNlICJp dGVtIiBhcyB0aGUgcGFyZW50IGVsZW1lbnRzIG9mIGFuIFJTUyBmZWVkLCBvciAidHJhY2si IGZvciBhIExhc3QuZm0gZmVlZC48L3A+CgogICA8cD48c3Ryb25nPmVsZW1lbnRzPC9zdHJv bmc+OiBUaGUgZWxlbWVudHMgeW91IHdhbnQgdG8gcmV0cmVpdmUgZnJvbSB0aGUgWE1MIGRv Y3VtZW50IGFzIGEgY29tbWEgc2VwZXJhdGVkIGxpc3QuIFRvIHJldHJpZXZlIGFuIGF0dHJp YnV0ZSBvZiBhbiBlbGVtZW50IHVzZSB0aGUgZm9sbG93aW5nIGZvcm1hdDogImVsZW1lbnQ+ YXR0cmlidXRlIi48L3A+CgogICA8cD48c3Ryb25nPmZvcm08L3N0cm9uZz46IFRoZSBmb3Jt IHVzZWQgdG8gb3V0cHV0IGVhY2ggaXRlbSB3aXRoaW4gdGhlIHhtbCBkb2N1bWVudC48L3A+ CgogICA8cD48c3Ryb25nPndyYXB0YWcvYnJlYWs8L3N0cm9uZz46IFRhZ3MgdXNlZCB0byB3 cmFwIGFuZCBicmVhayBlYWNoIGl0ZW0gd2l0aGluIHRoZSBYTUwgZG9jdW1lbnQuICJXcmFw dGFnIiBkZWZhdWx0cyB0byAnb2wnIGFuZCAiYnJlYWsiIGRlZmF1bHRzIHRvICJvbCIuPC9w PgoKICAgPHA+PHN0cm9uZz5jYWNoZXRpbWU8L3N0cm9uZz46IFRoZSBudW1iZXIgb2Ygc2Vj b25kcyB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZS4gRGVmYXVsdHMgdG8gJzMwMCcuPC9wPgoK ICAgPHA+PHN0cm9uZz5saW1pdDwvc3Ryb25nPjogVGhlIG51bWJlciBvZiBpdGVtcyB0byBy ZXR1cm4uIERlZmF1bHRzIHRvICc1Jy48L3A+CgogICA8YnIvPgoKICAgPGgyPmprX3htbF9l bGVtZW50PC9oMj4KCiAgIDxwPlVzZWQgd2l0aGluIGEgZm9ybSBjYWxsZWQgYnkgPHN0cm9u Zz5qa19wYXJzZV94bWw8L3N0cm9uZz4sIHRoaXMgdGFnIHdpbGwgb3V0cHV0IHRoZSB2YWx1 ZSBvZiBhIHNwZWNpZmljIGVsZW1lbnQgaW4gYW4gaXRlbSBvZiBhbiBYTUwgZG9jdW1lbnQu ICBUaGlzIGZ1bmN0aW9uIGhhcyB0d28gYXR0cmlidXRlLCA8ZW0+bmFtZTwvZW0+LCBhbmQg PGVtPmF0dDwvZW0+IHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtZSAob3IgbmFtZSBhbmQgYXR0 cmlidXRlIHBhaXIpIG9mIHRoZSBlbGVtZW50IHdob3NlIHZhbHVlIHlvdSB3YW50IHJldHVy bmVkLjwvcD4KCiI7czo0OiJjb2RlIjtzOjM1OTI6IgpmdW5jdGlvbiBqa19wYXJzZV94bWwo JGF0dHMpIHsKICBnbG9iYWwgJHRoaXNpdGVtLCAkdHhwY2ZnOwoKCWV4dHJhY3QoZ2V0X3By ZWZzKCkpOwogIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAneG1sJyA9PiAnJywKICAgICdw YXJlbnRzJyA9PiAnJywKICAgICdlbGVtZW50cycgPT4gJycsCiAgICAnZm9ybScgPT4gJycs CiAgICAnd3JhcHRhZycgPT4gJ29sJywKICAgICdicmVhaycgPT4gJ2xpJywKICAgICdsb2Nh bF9maWxlJyA9PiAwLAogICAgJ2xpbWl0JyA9PiAnNScsCiAgICAnY2FjaGV0aW1lJyA9PiAn MzAwJwoJCSksJGF0dHMpKTsKCiAgLy8gZ2V0IGZvcm0gYW5kIHByZXAgdmFyaWFibGVzCiAg JGZvcm0gPSBmZXRjaCgnRm9ybScsJ3R4cF9mb3JtJywnbmFtZScsJGZvcm0pOwoJaWYoISRm b3JtKSB7IHJldHVybiAnTm8gZm9ybSBzcGVjaWZpZWQnOyB9CgkkZWxlbWVudHMgPSBleHBs b2RlKCcsJywgJGVsZW1lbnRzKTsKCSRlbGVtZW50cyA9IGRvQXJyYXkoJGVsZW1lbnRzLCAn dHJpbScpOwoKICAvLyBpZiBsb2NhbCBmaWxlCiAgaWYgKCRsb2NhbF9maWxlKSB7CiAgICBp ZiAoZmlsZV9leGlzdHMoJHhtbCkpIHsKICAgICAgJHhtbCA9IGltcGxvZGUoIlxuIiwgZmls ZSgkeG1sKSk7CiAgICB9CiAgICBlbHNlICR4bWwgPSBmYWxzZTsKICB9CgogIC8vIGlmIHJl bW90ZQogIGVsc2UgewoKICAgICRjYWNoZWZpbGUgPSAkdHhwY2ZnWyd0eHBhdGgnXS4nL2Nh Y2hlLycuamtfeG1sX3NhZmVuYW1lKCR4bWwpOwoKICAgIC8vIGNhY2hlIGV4aXN0cz8KICAJ aWYoZmlsZV9leGlzdHMoJGNhY2hlZmlsZSkgYW5kICh0aW1lKCkgLSBmaWxlbXRpbWUoJGNh Y2hlZmlsZSkgPCAkY2FjaGV0aW1lKSl7CiAgCQkkeG1sID0gaW1wbG9kZSgiXG4iLCBmaWxl KCRjYWNoZWZpbGUpKTsKICAJfQoKICAgIGVsc2UgewogICAgICAvLyBjYW4gd2Ugb3BlbiBh IHJlbW90ZSBmaWxlPwogICAgICBpZiAoaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykgPT0g MSkgewogICAgICAgICRoYW5kbGUgPSBmb3BlbigkeG1sLCAncicpOwogICAgICAgICR4bWwg PSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRoYW5kbGUpOwogICAgICB9CgogICAgICAvLyBjdXJs IQogICAgICBlbHNlIHsKICAgICAgICAkY2ggPSBjdXJsX2luaXQoKTsKICAgICAgICAkdGlt ZW91dCA9IDU7IC8vIHNldCB0byB6ZXJvIGZvciBubyB0aW1lb3V0CiAgICAgICAgY3VybF9z ZXRvcHQgKCRjaCwgQ1VSTE9QVF9VUkwsICR4bWwpOwogICAgICAgIGN1cmxfc2V0b3B0ICgk Y2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwogICAgICAgIGN1cmxfc2V0b3B0ICgk Y2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsKICAgICAgICAkeG1sID0g Y3VybF9leGVjKCRjaCk7CiAgICAgICAgY3VybF9jbG9zZSgkY2gpOwogICAgICB9CgogICAg ICAvLyB3cml0ZSBjYWNoZQogICAgICBpZiAoJHhtbCkgewogICAgICAgIC8vIGNyZWF0ZSBj YWNoZSBkaXJlY3RvcnkKICAgICAgICBpZiAoIWlzX2RpcigkdHhwY2ZnWyd0eHBhdGgnXS4n L2NhY2hlJykpIHsKICAgICAgICAgIG1rZGlyKCR0eHBjZmdbJ3R4cGF0aCddLicvY2FjaGUn KTsKICAgICAgICB9CiAgICAgICAgLy8gY3JlYXRlIGZpbGUKICAgICAgICAkZnAgPSBmb3Bl bigkY2FjaGVmaWxlLCAndycpOwogICAgICAgIC8vIHdyaXRlIGNhY2hlCiAgICAgICAgaWYg KCRmcCkgewogICAgICAJCWZ3cml0ZSgkZnAsICR4bWwpOwogICAgICAJCWZjbG9zZSgkZnAp OwogICAgCQl9CiAgICAgIH0KICAgIH0KICB9CgogIC8vIHBhcnNlIHhtbCBkb2N1bWVudCB0 byBhcnJheQogIGlmICghZW1wdHkoJHhtbCkpIHsKICAgICRkb2MgPSBuZXcgRE9NRG9jdW1l bnQoKTsKICAgICRkb2MtPmxvYWRYTUwoJHhtbCk7CiAgICAkeG1sID0gYXJyYXkoKTsKICAg ICRpID0gMDsKICAgIGZvcmVhY2ggKCRkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCRwYXJl bnRzKSBhcyAkbm9kZSkgewogICAgICBmb3IgKCRqPTA7ICRqIDwgY291bnQoJGVsZW1lbnRz KTsgJGorKykgewogICAgICAgIC8vIGF0dHJpYnV0ZT8KICAgICAgICBpZihzdHJwb3MoJGVs ZW1lbnRzWyRqXSwgJz4nKSkgewogICAgICAgICAgJHRhZyA9IGN1cnJlbnQoZXhwbG9kZSgn PicsICRlbGVtZW50c1skal0pKTsKICAgICAgICAgICRhdHQgPSBlbmQoZXhwbG9kZSgnPics ICRlbGVtZW50c1skal0pKTsKICAgICAgICAgICR4bWxbJGldWyR0YWddWyRhdHRdID0gJG5v ZGUtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCR0YWcpLT5pdGVtKDApLT5nZXRBdHRyaWJ1dGUo JGF0dCk7CiAgICAgICAgfQogICAgICAgIC8vIG5vZGUgdmFsdWU/CiAgICAgICAgZWxzZSB7 CiAgICAgICAgICAkeG1sWyRpXVskZWxlbWVudHNbJGpdXSA9ICRub2RlLT5nZXRFbGVtZW50 c0J5VGFnTmFtZSgkZWxlbWVudHNbJGpdKS0+aXRlbSgwKS0+bm9kZVZhbHVlOwogICAgICAg IH0KICAgICAgfQogICAgICAkaSsrOwogICAgfQoKICAgIGlmICghZW1wdHkoJHhtbCkpIHsK ICAgICAgLy8gYmVnaW4gYnVpbGRpbmcgb3V0cHV0CiAgICAgICRvdXRsaXN0ID0gIGFycmF5 KCk7CgogICAgICBmb3IgKCRpPTA7ICgkaSA8IGNvdW50KCR4bWwpKSAmJiAoJGkgPCAkbGlt aXQpOyAkaSsrKSB7CiAgICAgICAgJG91dCA9ICRmb3JtOwogICAgICAgICR0aGlzaXRlbSA9 ICR4bWxbJGldOwogICAgICAgICRvdXRsaXN0W10gPSBwYXJzZSgkb3V0KTsKICAgICAgfQoK ICAgICAgaWYgKCFlbXB0eSgkb3V0bGlzdCkpIHsKICAgICAgICByZXR1cm4gZG9XcmFwKCRv dXRsaXN0LCAkd3JhcHRhZywgJGJyZWFrLCAneG1sLWZlZWQnKTsKICAgICAgfQogICAgfQog IH0KfQoKZnVuY3Rpb24gamtfeG1sX2VsZW1lbnQoJGF0dHMpIHsKICBnbG9iYWwgJHRoaXNp dGVtOwogIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAnbmFtZScgPT4gJycsCiAgICAnYXR0 JyA9PiAnJywKCQkpLCRhdHRzKSk7CgoJaWYgKGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0 aGlzaXRlbSkpIHsKCSAgaWYgKGFycmF5X2tleV9leGlzdHMoJGF0dCwgJHRoaXNpdGVtWyRu YW1lXSkpIHsKCSAgICByZXR1cm4gJHRoaXNpdGVtWyRuYW1lXVskYXR0XTsKICAgIH0KICAg IGVsc2UgcmV0dXJuICR0aGlzaXRlbVskbmFtZV07Cgl9Cn0KCgpmdW5jdGlvbiBqa194bWxf c2FmZW5hbWUoJHVybCkgewogICAgJHRlbXAgPSAkdXJsOwoKICAgIC8vIHByZXAgbmFtZQog ICAgJHRlbXAgPSBzdHJ0b2xvd2VyKCR0ZW1wKTsKICAgICR0ZW1wID0gc3RyX3JlcGxhY2Uo IiAiLCAiXyIsICR0ZW1wKTsKICAgICR0ZW1wID0gc3RyX3JlcGxhY2UoImh0dHAiLCAiIiwg JHRlbXApOwogICAgJHRlbXAgPSBzdHJfcmVwbGFjZSgid3d3IiwgIiIsICR0ZW1wKTsKCiAg ICAvLyBMb29wIHRocm91Z2ggc3RyaW5nCiAgICAkcmVzdWx0ID0gJyc7CiAgICBmb3IgKCRp PTA7ICRpPHN0cmxlbigkdGVtcCk7ICRpKyspIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgn KFswLTldfFthLXpdfF8pJywgJHRlbXBbJGldKSkgewogICAgICAgICAgICAkcmVzdWx0ID0g JHJlc3VsdCAuICR0ZW1wWyRpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJHJlc3Vs dDsKfQoiO3M6MzoibWQ1IjtzOjMyOiI4OTMyNjMxYmU3M2NkYzUxZWQ3NzVlNzdlYWQ0OTRl YSI7czo4OiJjb21wcmVzcyI7YjowO30=