Subject: Re: Counting Nodes From: Brandon Ibach <bibach@xxxxxxxxxxxxxx> Date: Thu, 24 Feb 2000 15:22:32 -0600 |
Quoting Maltby, David G <david.g.maltby@xxxxxxxx>: > I am working on producing RTF from content marked up with DTD which I do not > control. It contains chunks such as: > > <alert> > <text type="list:num"> > <text>List Item 1</text> > <text type="list:alpha"> > <text>List Item a</text> > <text>List Item b</text> > </text> > <text>List Item 2</text> > <text>List Item 3</text> > </alert> > > [...] > > Counting-wise this works great, the problem is when looking at the text > nodes containing "List Item 1", "List Item 2", or "List Item 3", > text-siblings starts out containing 13 nodes. The procedure exits, > respectively, on the 1st, 8th, and 12th node. My RTF looks like: > > 1. List Item 1 > a. List Item a > b. List Item b > 8. List Item 2 > 12. List Item 3 > > For non-built-in procedures, I have used the procedure definitions found in > the DSSSL Documentation Library. I can not for the life of me figure out > what group of 13 nodes (siblings) is returning to me. Any ideas on how I > might debug this? Is there a more elegant method I have not considered? > Okay, I have to theorize here, a bit, because I don't have the DTD you're using (in addition to the fact that I don't really know the SGML whitespace handling rules very well). The 13 nodes are: The <text> containing "List Item 1", the newline and two spaces following, the <text> containing the sublist, the two spaces at the beginning of the line following the closing tag of that, the <text> containing "List Item 2", the newline and two spaces following, the <text> containing "List Item 3", and the following newline. That should be a total of 13, and should match the numbering you're getting. So, the solution is to just include a clause in your (cond) to check the class of each node and ignore it completely (including *not* incrementing the counter) if it isn't an element. And while you're modifying that procedure, you'll want to drop the parens around "cnt" in the clause with (node-list-empty?). This clause should, theoretically, never fire, but if it did, it would try to execute cnt, which is not a procedure. And, for the record, the problem (or "confusion", perhaps) here is that, I expect, the "text" element is declared to have mixed content in order to allow either the text of item or a list of other <text>s, thus the mixture of elements and data-chars in the node-list you're getting from (siblings). I believe I have a procedure around here somewhere that works like (debug) for node-lists, dumping out quite a bit of information about their members but returning the node-list unscathed. Let me know if you're interested, and I'll dig it up and make sure it's in working order. :) -Brandon :) DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Counting Nodes, Maltby, David G | Thread | Re: Counting Nodes, Matthias Clasen |
Counting Nodes, Maltby, David G | Date | Re: Counting Nodes, Matthias Clasen |
Month |