I noticed a recent IRC exchange where someone was frustrated with se-path*/list, and felt it didn't help enough compared to Python's standard lib for this.[^1] They were trying to get the <row> elements from an API like this[^2]:
<?xml version='1.0' encoding='UTF-8'?> <eveapi version="2"> <currentTime>2011-09-10 14:41:29</currentTime> <result> <key accessMask="59760264" type="Character" expires="2011-09-11 00:00:00"> <rowset name="characters" key="characterID" columns="characterID,characterName,corporationID,corporationName"> <row characterID="898901870" characterName="Desmont McCallock" corporationID="1000009" corporationName="Caldari Provisions" /> </rowset> </key> </result> <cachedUntil>2011-09-10 14:46:29</cachedUntil> </eveapi> Now, in the past I've dealt with XML by hand-coding, e.g. using `match`. Which has worked fine for me. But I'd never really noticed xml/path (was it added recently??) so I sat down to try it. Maybe I should use that more. But a few things I noticed: 1. Name: Why the * in `se-path*` and `se-path*/list` names? By convention this made me look for the non-* versions of these, which I couldn't find. 2. Whitespace: When I try `(se-path*/list '(rowset) xe)` I get '("\n " (row ((characterID "898901870") (characterName "Desmont McCallock") (corporationID "1000009") (corporationName "Caldari Provisions"))) "\n ") Even with collapse-whitespace parameter set #t, I get '(" " (row ((characterID "898901870") (characterName "Desmont McCallock") (corporationID "1000009") (corporationName "Caldari Provisions"))) " ") I understand why, and what to do about it. But I'm not sure about a new user. Probably I would instead try the following... 3. Can't get elements with their attributes: If I try `(se-path*/list '(rows) xe)` I get back '(). Huh. I guess that's because the <row> elements have empty bodies -- the interesting stuff is in their attributes. OK, but I don't see how to get the element with attributes conveniently, using xml/path. Although I'm not very familiar with XPath, I think there probably is a role for something simpler than it, provided with Racket itself, and xml/path is a good idea. Does it make sense to enhance it just a bit more, though? p.s. If the original author of xml/path can't or doesn't want to do this, I'd volunteer to take a shot and create a pull request. However I know so little about XPath, I'm not sure whether that makes me the best or worst person to be doing this (I'm mostly not joking). [1]: http://docs.python.org/2/library/xml.etree.elementtree.html [2]: http://wiki.eve-id.net/APIv2_Account_APIKeyInfo_XML ____________________ Racket Users list: http://lists.racket-lang.org/users