"John J. Boyer" <john.bo...@abilitiessoft.com> writes:

> The document is xhtml with <head and <body inside the <HTML tag. The 
> code is pasted below the line of dashes. The problem area starts with 
> the line
>
> oldPrebSib = furbrl->prev;
>
> curBrlNode is defined and set outside this function Itcontains a 
> braille translation, in this case of a MathML 
> expression. This has already been placed in transNode. curbrlNode 
> follows a <math tag, with its subtree. The math expression is supposed 
> to be replaced by transNode and curBrlNode removed. When I trace through 
> the code with gdb it appears to work properly. However, xmlDocDump does 
> not produce anything except the <head subtree within the <HTML tag 
> of the xhtml document. 
> In other words, the body is completely missing. Suggestions? Thanks.

Can you give a complete example? I tried with code below and it seems to
work:

brail.c:
=====================

#include <stdio.h>

#include <libxml/parser.h>
#include <libxml/xpath.h>
#include <libxml/tree.h>
#include <libxml/xpath.h>

static xmlNode *curBrlNode, *afterCurBrl;
static int useAfterCurBrl;

static int
finishBrlNode ()
{
  /* int wcLength; */
  /* int utf8Length; */
  /* unsigned char *transText = (unsigned char *) ud->outbuf2; */
  xmlNode *transNode;
  xmlNode *linkedTransNode;
  xmlNode *oldPrevSib;
  xmlNode *oldBrlNode;
  /* wcLength = ud->outbuf1_len_so_far; */
  /* utf8Length = ud->outbuf2_len; */
  /* wc_string_to_utf8 (ud->outbuf1, &wcLength, transText, &utf8Length); */
  xmlChar transText[] = "the translation...";
  transNode = xmlNewText (transText);
  oldPrevSib = curBrlNode->prev;
  if (oldPrevSib != NULL)
    {
      xmlUnlinkNode (oldPrevSib);
      xmlFreeNode (oldPrevSib);
    }
  linkedTransNode = xmlAddPrevSibling (curBrlNode, transNode);
  afterCurBrl = curBrlNode->next;
  useAfterCurBrl = 1;
  oldBrlNode = curBrlNode;
  xmlUnlinkNode (oldBrlNode);
  xmlFreeNode (oldBrlNode);
  return 1;
}

int main()
{
    xmlDocPtr doc = xmlReadFile("brail.xml", NULL, XML_PARSE_NOBLANKS);
    xmlXPathContextPtr ctxt = xmlXPathNewContext(doc);
    curBrlNode = xmlXPathEval("//cur-brl", ctxt)->nodesetval->nodeTab[0];

    finishBrlNode();
    xmlDocDump(stdout, doc);
    return 0;
}
================

brail.xml:
======================
<html>
  <body>
    <beginning> filler </beginning>
    <math>
      <subtree> subtree of math </subtree>
    </math>
    <cur-brl>
      <subtree> subtree of cur-brl </subtree>
    </cur-brl>
    <trailing-stuff> end filler </trailing-stuff>
  </body>
</html>
=================

Output:
====================
<?xml version="1.0"?>
<html><body><beginning> filler </beginning>the translation...<trailing-stuff> 
end filler </trailing-stuff></body></html>
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to