all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Lars Magne Ingebrigtsen <larsi@gnus.org>
To: emacs-devel@gnu.org
Subject: Re: Problems with xml-parse-string
Date: Fri, 24 Sep 2010 21:06:52 +0200	[thread overview]
Message-ID: <m31v8jarlf.fsf@quimbies.gnus.org> (raw)
In-Reply-To: 87iq1v0yi2.fsf@stupidchicken.com

Chong Yidong <cyd@stupidchicken.com> writes:

>> To take a concrete example: You want the src of the img node you have.
>>
>> xml.el:  (cdr (assq 'img (cadr node)))
>> sxml.el: (if (and (consp (cadr node))
>>                   (eq (caadr node) '@))
>>              (cadr (assq 'img node)))
>>
>> (And I'm not even sure that's correct.  It's probably not.  Which is my
>> point.)
>>
>> libxml: (cdr (assq :img (cdr node)))
>>
>> (The difference between libxml and xml.c for attributes is minuscule.)
>
> I think this example is confused.  If you're scanning at top-level,
> without descent, the code for all three cases is practically identical:
> it's a simple assq.

Sorry, "img" in the examples should be replaced with "src".

But I don't understand what you mean with "top-level".  This example was
about getting an attribute.

Chong Yidong <cyd@stupidchicken.com> writes:

> I think that code might just be crufty.  Here's an implementation,
> assuming sxml format:
>
>   (defun nnrss-find-el (tag data &optional found-list)
>    "Find the all matching elements in the data.
>   Careful with this on large documents!"
>    (nreverse (nnrss-find-el-1 tag data)))
>
>   (defun nnrss-find-el-1 (tag data &optional found-list)
>     (and (consp data)
>          (not (eq (car data) '@))
>          (if (equal tag (car data))
>              (push data found-list)
>            (dolist (bit (cdr data))
>              (setq found-list
>                    (nnrss-find-el-1 tag bit found-list)))))
>     found-list)

Here's the libxml version:

(defun nnrss-find-el (tag node)
  (let (result)
    (dolist (elem (cdr node))
      (when (eq (car elem) tag)
	(push elem result))
       (when (consp (cdr elem))
	 (setq result (nconc (nnrss-find-el tag elem) result))))
    result))

(Of course, if we were allowed to use CL constructions, it would be
something like (untested, because I have to run):

(defun nnrss-find-el (tag node)
  (loop for elem in (cdr node)
        if (eq (car elem) tag)
        collect elem
        when (consp (cdr elem))
        append (nnrss-find-el tag node)))

Can get much clearer than that, can it?        
        
> Doesn't seem too horrific.  Here's the example tree:

It's not too horrific.  It's just that it's not as nice as it could be.
And if you deal with these structures all the time, you get to recreate
the (and (consp data) (not (eq (car data) '@))) in every single branch
of every single little trivial function you write (and read).

>   (setq test-sxml-tree
>         '(tag (@ (attr1 "value1")
>                  (attr2 "value2"))
>               "Free text"
>               (foo "Text node 1")
>               (bar "Text node 2")
>               (baz
>                 "More free text"
>                 (foo "Text node 3")
>                 (bar "Text node 4"))))

(setq test-libxml-tree
      '(tag
	(:attr1 . "value1")
	(:attr2 . "value2")
	(text . "Free text")
	(foo (text . "Text node 1"))
	(bar (text . "Text node 2"))
	(baz
	 (text . "More free text")
	 (foo (text . "Text node 3"))
	 (bar (text . "Text node 4")))))
    
-- 
(domestic pets only, the antidote for overdose, milk.)
  larsi@gnus.org * Lars Magne Ingebrigtsen




  parent reply	other threads:[~2010-09-24 19:06 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-14 18:11 Problems with xml-parse-string Leo
2010-09-14 18:24 ` Lars Magne Ingebrigtsen
2010-09-14 21:18   ` Stefan Monnier
2010-09-15  8:06     ` Lars Magne Ingebrigtsen
2010-09-15  8:51       ` Stefan Monnier
2010-09-15  9:21         ` Lars Magne Ingebrigtsen
2010-09-15  9:54           ` Leo
2010-09-15 10:16             ` Julien Danjou
2010-09-15 15:58               ` Chad Brown
2010-09-21 23:00           ` Chong Yidong
2010-09-21 23:24             ` Leo
2010-09-22  2:26               ` Chong Yidong
2010-09-22  3:15                 ` Chong Yidong
2010-09-22  7:14                   ` Stefan Monnier
2010-09-22 10:35                   ` Lars Magne Ingebrigtsen
2010-09-22 10:58                     ` Lars Magne Ingebrigtsen
2010-09-22 11:00                     ` Leo
2010-09-22 11:09                       ` Lars Magne Ingebrigtsen
2010-09-22 11:41                         ` Lars Magne Ingebrigtsen
2010-09-22 11:55                           ` Wojciech Meyer
2010-09-22 12:09                             ` Lars Magne Ingebrigtsen
2010-09-22 12:17                               ` Wojciech Meyer
2010-09-22 12:18                                 ` Lars Magne Ingebrigtsen
2010-09-22 12:20                                   ` Wojciech Meyer
2010-09-22 12:26                                     ` Lars Magne Ingebrigtsen
2010-09-22 12:34                                       ` Wojciech Meyer
2010-09-22 12:46                                         ` Lars Magne Ingebrigtsen
2010-09-22 12:45                         ` Leo
2010-09-22 13:14                           ` Lars Magne Ingebrigtsen
2010-09-22 14:07                             ` Chong Yidong
2010-09-22 15:04                               ` Eli Zaretskii
2010-09-22 23:59                               ` Stefan Monnier
2010-09-23  5:53                                 ` Leo
2010-09-23 15:43                                   ` Chong Yidong
2010-09-23 16:53                                     ` Leo
2010-09-23 21:58                                     ` Wojciech Meyer
2010-09-23 22:21                                     ` Lars Magne Ingebrigtsen
2010-09-24  0:04                                       ` Stefan Monnier
2010-09-24  0:06                                         ` Lars Magne Ingebrigtsen
2010-09-24  1:09                                           ` Chong Yidong
2010-09-24  2:46                                             ` David De La Harpe Golden
2010-09-24  5:38                                               ` David Kastrup
2010-09-24  8:02                                               ` Eli Zaretskii
2010-09-24 10:47                                                 ` Wojciech Meyer
2010-09-24 10:44                                             ` Wojciech Meyer
2010-09-24 10:49                                             ` Lars Magne Ingebrigtsen
2010-09-24 15:25                                               ` Chong Yidong
2010-09-24 15:53                                                 ` Lars Magne Ingebrigtsen
2010-09-24 16:26                                                   ` Chong Yidong
2010-09-24 16:46                                                     ` Lars Magne Ingebrigtsen
2010-09-24 17:34                                                       ` Wojciech Meyer
2010-09-24 18:09                                                         ` Frank Schmitt
2010-09-24 18:21                                                           ` Ted Zlatanov
2010-09-24 18:31                                                           ` Wojciech Meyer
2010-09-24 18:47                                                       ` Chong Yidong
2010-09-24 18:53                                                         ` Chong Yidong
2010-09-24 18:58                                                           ` Wojciech Meyer
2010-09-24 19:06                                                         ` Lars Magne Ingebrigtsen [this message]
2010-09-24 19:25                                                           ` Chong Yidong
2010-09-24 19:34                                                             ` Lars Magne Ingebrigtsen
2010-09-24 21:57                                                               ` Chong Yidong
2010-09-25 13:11                                                                 ` Lars Magne Ingebrigtsen
2010-09-25 13:31                                                                   ` Eli Zaretskii
2010-09-25 13:56                                                                     ` David Kastrup
2010-09-25 13:59                                                                     ` Wojciech Meyer
2010-09-25 16:13                                                                       ` Eli Zaretskii
2010-09-25 16:46                                                                         ` Wojciech Meyer
2010-09-25 22:29                                                                           ` Juanma Barranquero
2010-09-25 15:00                                                                     ` Chong Yidong
2010-09-24 22:01                                                             ` Stefan Monnier
2010-09-24 22:17                                                               ` Chong Yidong
2010-09-25  0:25                                                                 ` Wojciech Meyer
2010-09-25 14:42                                                       ` Andy Wingo
2010-09-25 15:12                                                         ` Leo
2010-09-25 15:21                                                         ` Leo
2010-09-25 15:42                                                           ` Wojciech Meyer
2010-09-25 20:02                                                             ` Stefan Monnier
2010-09-25 20:32                                                               ` Leo
2010-09-25 23:08                                                               ` Leo
2010-09-26 21:55                                                                 ` Stefan Monnier
2010-09-26 23:34                                                                   ` Leo
2010-09-26  3:48                                                               ` pcase.el (was: Problems with xml-parse-string) Ted Zlatanov
2010-09-26 22:06                                                                 ` pcase.el Stefan Monnier
2010-09-27 16:59                                                                   ` pcase.el Leo
2010-09-27 22:51                                                                     ` pcase.el Stefan Monnier
2010-09-28 18:17                                                                   ` pcase.el Ted Zlatanov
2010-09-24 23:43                                         ` Problems with xml-parse-string Andrew W. Nosenko
2010-09-23  2:16                               ` Kevin Rodgers
2010-09-22 14:05                     ` Chong Yidong
2010-09-22 14:32                       ` Lars Magne Ingebrigtsen
2010-09-22 15:46                         ` Chong Yidong
2010-09-22 16:12                           ` Lars Magne Ingebrigtsen
2010-09-22 16:51                           ` Wojciech Meyer
2010-09-22 18:06                             ` Chong Yidong
2010-09-22 18:14                               ` Edward O'Connor
2010-09-22 18:34                                 ` Leo
2010-09-22 18:41                                   ` Chong Yidong
2010-09-22 19:57                                     ` Wojciech Meyer
2010-09-22 18:06                             ` Andy Wingo
2010-09-22 23:48             ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m31v8jarlf.fsf@quimbies.gnus.org \
    --to=larsi@gnus.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.