From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tim Landscheidt Newsgroups: gmane.emacs.help Subject: Re: elisps dom library doesn't work as I expect Date: Wed, 10 May 2023 20:18:40 +0000 Organization: https://www.tim-landscheidt.de/ Message-ID: <873544gctb.fsf@vagabond.tim-landscheidt.de> References: <87ttwmgnxg.fsf@mail.de> <87fs866pei.fsf@vagabond.tim-landscheidt.de> <87mt2chma4.fsf@mail.de> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39424"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) Cc: help-gnu-emacs@gnu.org To: Stefan Huchler Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Wed May 10 22:19:25 2023 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pwqHV-000A3i-G1 for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 10 May 2023 22:19:25 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pwqGy-0007KQ-64; Wed, 10 May 2023 16:18:52 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pwqGv-0007K2-Pi for help-gnu-emacs@gnu.org; Wed, 10 May 2023 16:18:49 -0400 Original-Received: from andalucia.tim-landscheidt.de ([2a01:4f8:1c1c:d4d0::1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pwqGt-0007up-CP for help-gnu-emacs@gnu.org; Wed, 10 May 2023 16:18:49 -0400 Original-Received: from ipb218f4d4.dynamic.kabel-deutschland.de ([178.24.244.212]:47896 helo=vagabond) by andalucia.tim-landscheidt.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1pwqGq-0000uF-Ek; Wed, 10 May 2023 20:18:44 +0000 In-Reply-To: <87mt2chma4.fsf@mail.de> (Stefan Huchler's message of "Wed, 10 May 2023 05:56:35 +0200") Received-SPF: pass client-ip=2a01:4f8:1c1c:d4d0::1; envelope-from=tim@tim-landscheidt.de; helo=andalucia.tim-landscheidt.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.help:143555 Archived-At: Stefan Huchler wrote: >> dom-by-tag returns a list of DOM elements; however, >> dom-elements expects a single DOM element as its second ar- >> gument. So you need to iterate over the list of DOM ele- >> ments returned by dom-by-tag and call dom-elements on each, >> or use dom-search, etc. > Interesting, I find the documention of dom-elements confusing: >> Find elements matching MATCH > what are the "elements" then? attributes not tags/ dom entries? But yes > that would be a bugreport about the documentation also that dom-elements > is not even listed in the gnu doku seem strange to me. "Elements" in the context of dom-elements means the children of the node passed as DOM (AFAICT). > But maybe I am just not good enough in xml lingo. That's not really a problem here as it is not /the/ prob- lem :-); the dom-* functions only lightly relate to XML or DOM concepts in JavaScript & Co. so one has to refer to the Emacs "model". As almost everything is a list in Emacs, one does not get a meaningful error when using the DOM functions incorrectly but instead the code just does not work. > Could you explain a bit or show a example of the dom-search function or > explain it's parameters. I have no idea what in the docstring > "predicate" means and in what format it's expected, is Predicate a known > term for something specific? A predicate in Emacs Lisp is typically a (possibly anonymous) function that looks at something and then returns t for some values and nil for others. So for your use case, you could write something =E0 la: | (let | ((dom (with-temp-buffer (url-insert-file-contents | "https://www.ebay.com/itm/185887279856") | (libxml-parse-html-region (point-min) (point-= max))))) | (dom-attr (car | (dom-search | dom | (lambda (d) | (and (equal (dom-tag d) 'meta) | (equal (dom-attr d 'itemprop) "name"))))) | 'content)) This will iterate over all DOM elements in the document, return those that have a tag "meta" and an attribute "itemprop" with the value "name", take the first (and probably only) one, and return the value of this element's "content" attribute. Tim