You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@xerces.apache.org by Kenneth Ramirez <kr...@metlife.com> on 2000/02/09 15:37:47 UTC

Retrieving XML Doc from DOM as a string


I convinced the organization that I'm currently consulting to start using Xerces
in our middle tier to return data retrieved from the database to the browser.
We actually have to first go through an ASP page before hitting the browser
(since the site is managed with IIS).  In order to return the XML document to
the active server page, we're placing our data first into a DOM so that it
creates the structure for us, then we pull out the XML document as a string and
return it to the ASP.  Here is the problem, I could not find a way to retrieve
the code from the XML document as a string, so I had to write my own.  Am I
missing something, or am I correct in assuming that there is no way of pulling
the data out from the DOM as a string?  I'd expect that there would be some
method on the DOM as follows:

     Document doc = ...; // Get the document and fill it with the XML data.
     String xmlDocAsString = doc.getXMLDocAsString();
     return xmlDocAsString;

I went ahead and wrote my own, based on an example that I found on the IBM
development site in the Java/XML tutorial.  The following is the code that I
wrote, which I hope is included into the Xerces implementation if the
functionality is not there yet.  I'm sure that others will have a similar need:

          String getXMLDocAsString(Node node)
          {
               String str = new String();

               int type = node.getNodeType();
               switch (type)
               {
                 case Node.DOCUMENT_NODE:
                 {
                   str = str.concat("<?xml version=\"1.0\" ?>");
                   str =
str.concat(getXMLDocAsString(((Document)node).getDocumentElement()));
                   break;
                 }

                 case Node.ELEMENT_NODE:
                 {
                   str = str.concat("<");
                   str = str.concat(node.getNodeName());
                   NamedNodeMap attrs = node.getAttributes();
                   for (int i = 0; i < attrs.getLength(); i++)
                   {
                     Node attr = attrs.item(i);
                     str = str.concat(" " + attr.getNodeName() +  "=\"" +
attr.getNodeValue() +  "\"");
                   }
                   str = str.concat(">");

                   NodeList children = node.getChildNodes();
                   if (children != null)
                   {
                     int len = children.getLength();
                     for (int i = 0; i < len; i++)
                       str = str.concat(getXMLDocAsString(children.item(i)));
                   }

                   break;
                 }

                 case Node.ENTITY_REFERENCE_NODE:
                 {
                   str = str.concat("&");
                   str = str.concat(node.getNodeName());
                   str = str.concat(";");
                   break;
                 }

                 case Node.CDATA_SECTION_NODE:
                 {
                   str = str.concat("<![CDATA[");
                   str = str.concat(node.getNodeValue());
                   str = str.concat("]]>");
                   break;
                 }

                 case Node.TEXT_NODE:
                 {
                   str = str.concat(node.getNodeValue());
                   break;
                 }

                 case Node.PROCESSING_INSTRUCTION_NODE:
                 {
                   str = str.concat("<?");
                   str = str.concat(node.getNodeName());
                   String data = node.getNodeValue();
                   {
                     str = str.concat(" ");
                     str = str.concat(data);
                   }
                   str = str.concat("?>");
                   break;
                 }
               }

               if (type == Node.ELEMENT_NODE)
               {
                 str = str.concat("</");
                 str = str.concat(node.getNodeName());
                 str = str.concat(">");
               }

               return str;
          }

Thanks,

Ken Ramirez (Master-Mind Consulting Services, Inc. - kramirez@mastermind.com or
www.mastermind.com)





Re: Retrieving XML Doc from DOM as a string

Posted by RHS Linux User <hn...@ns1.netarx.com>.
Actually, if you're using or overwise want to download the Xerces-C
distribution, there is a program in the "samples" directory called
"DOMPrint.cpp" that is exactly like your program below.  Guess there isn't
anything like it currently built into Xerces...

-- HSN

On Wed, 9 Feb 2000, Kenneth Ramirez wrote:

> 
> 
> I convinced the organization that I'm currently consulting to start using Xerces
> in our middle tier to return data retrieved from the database to the browser.
> We actually have to first go through an ASP page before hitting the browser
> (since the site is managed with IIS).  In order to return the XML document to
> the active server page, we're placing our data first into a DOM so that it
> creates the structure for us, then we pull out the XML document as a string and
> return it to the ASP.  Here is the problem, I could not find a way to retrieve
> the code from the XML document as a string, so I had to write my own.  Am I
> missing something, or am I correct in assuming that there is no way of pulling
> the data out from the DOM as a string?  I'd expect that there would be some
> method on the DOM as follows:
> 
>      Document doc = ...; // Get the document and fill it with the XML data.
>      String xmlDocAsString = doc.getXMLDocAsString();
>      return xmlDocAsString;
> 
> I went ahead and wrote my own, based on an example that I found on the IBM
> development site in the Java/XML tutorial.  The following is the code that I
> wrote, which I hope is included into the Xerces implementation if the
> functionality is not there yet.  I'm sure that others will have a similar need:
> 
>           String getXMLDocAsString(Node node)
>           {
>                String str = new String();
> 
>                int type = node.getNodeType();
>                switch (type)
>                {
>                  case Node.DOCUMENT_NODE:
>                  {
>                    str = str.concat("<?xml version=\"1.0\" ?>");
>                    str =
> str.concat(getXMLDocAsString(((Document)node).getDocumentElement()));
>                    break;
>                  }
> 
>                  case Node.ELEMENT_NODE:
>                  {
>                    str = str.concat("<");
>                    str = str.concat(node.getNodeName());
>                    NamedNodeMap attrs = node.getAttributes();
>                    for (int i = 0; i < attrs.getLength(); i++)
>                    {
>                      Node attr = attrs.item(i);
>                      str = str.concat(" " + attr.getNodeName() +  "=\"" +
> attr.getNodeValue() +  "\"");
>                    }
>                    str = str.concat(">");
> 
>                    NodeList children = node.getChildNodes();
>                    if (children != null)
>                    {
>                      int len = children.getLength();
>                      for (int i = 0; i < len; i++)
>                        str = str.concat(getXMLDocAsString(children.item(i)));
>                    }
> 
>                    break;
>                  }
> 
>                  case Node.ENTITY_REFERENCE_NODE:
>                  {
>                    str = str.concat("&");
>                    str = str.concat(node.getNodeName());
>                    str = str.concat(";");
>                    break;
>                  }
> 
>                  case Node.CDATA_SECTION_NODE:
>                  {
>                    str = str.concat("<![CDATA[");
>                    str = str.concat(node.getNodeValue());
>                    str = str.concat("]]>");
>                    break;
>                  }
> 
>                  case Node.TEXT_NODE:
>                  {
>                    str = str.concat(node.getNodeValue());
>                    break;
>                  }
> 
>                  case Node.PROCESSING_INSTRUCTION_NODE:
>                  {
>                    str = str.concat("<?");
>                    str = str.concat(node.getNodeName());
>                    String data = node.getNodeValue();
>                    {
>                      str = str.concat(" ");
>                      str = str.concat(data);
>                    }
>                    str = str.concat("?>");
>                    break;
>                  }
>                }
> 
>                if (type == Node.ELEMENT_NODE)
>                {
>                  str = str.concat("</");
>                  str = str.concat(node.getNodeName());
>                  str = str.concat(">");
>                }
> 
>                return str;
>           }
> 
> Thanks,
> 
> Ken Ramirez (Master-Mind Consulting Services, Inc. - kramirez@mastermind.com or
> www.mastermind.com)
> 
> 
> 
>