Really no way to pretty print XML???

I wonder if there is really no way to pretty print a DOM, using Java's standard API (http://java.sun.com/j2se/1.4.2/docs/api/index.html).
What I've tried is (assume having a org.w3c.dom.Document instance doc:
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty("encoding", encoding);
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3" );
DOMSource source = new DOMSource(doc);
FileOutputStream os = new FileOutputStream(file);
StreamResult result = new StreamResult(os);
transformer.transform(source,result);which gives, e.g. something like
<?xml version="1.0" encoding="ISO-8859-1"?>
<documentData>
<Asset assetID="229609"/>
   <Picturedescription>
<Asset assetID="229609"/>
</Picturedescription>
</documentData>which is not even proper indent. I can't believe that there is no way in pretty prenting an XML document, using Java's Standard API....
Does anybody know more about it?
Urs

Have you tried this:
StringWriter sw = new StringWriter();
org.apache.xml.serialize.OutputFormat outFormat = new org.apache.xml.
serialize.OutputFormat();
outFormat.setIndenting(true);
outFormat.setIndent(4);
org.apache.xml.serialize.XMLSerializer xmlser = new org.apache.xml.serialize.XMLSerializer(sw, outFormat);
try {
xmlser.serialize(your_document); //replace your_document with reference to document you want to serialize
catch (Exception ex1) {
}

Similar Messages

  • How to pretty print XML alerts

    Hi!
    I'd like to generate mail alerts in OSB which include a XML content. I need XML to be human friendly printed (that is with indentation) but XML is printed in a single line.
    Is there any way to pretty print XML content in alerts (and also in alerts emails).
    Thank you in advance.

    The example of what the OP wants it to look like I thought was quite plain. Its right at the top of the post.
    Unfortunately it is also quite difficult to accomplish using System.out.print statements.
    You have to print out the root of the tree first (its at the top)
    However you don't know how far along to the right you need to print it without traversing the child nodes already (you need to know how deep the tree is, and how far to the left the tree extends from the root)
    So you will need to traverse the tree at least twice.
    Once to work out the offsets, and again to print out the values.
    The working out of offsets would have to be a depth search traversal I think
    The printing of the values in this fashion would be a breadth first traversal.
    I remember (ages ago) doing a similar assignment, except we printed the tree sideways.
    ie the root was on the left, the leaves of the tree on the right of the screen.
    That meant you could do an inorder depth traversal of the tree to just print it once.
    hope this helps,
    evnafets

  • Pretty printing xml with sql

    Hello
    I have to pretty print xml which is stored in data base column ( clob)
    My table
    create table mytab
    myxml clob);mydata
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Us name="Step">
    <my name ="st">
    <colol name="t"/>
    </my>
    </Us>any idea/suggestion?
    Edited by: user10647455 on Dec 19, 2011 2:04 PM

    Thanks !
    I tired this as well
    select XMLSerialize( document xmltype(myxml) as CLOB INDENT ) from mytab;

  • Pretty-print xml

    Anybody has any idea how can I do a pretty-print of an xml which is stored in the oracle database as CLOB.
    I tried LSSerializer, but could not get it work. I am using jdeveloper10.1.2
    Thanks
    MM

    Have you tried this:
    StringWriter sw = new StringWriter();
    org.apache.xml.serialize.OutputFormat outFormat = new org.apache.xml.
    serialize.OutputFormat();
    outFormat.setIndenting(true);
    outFormat.setIndent(4);
    org.apache.xml.serialize.XMLSerializer xmlser = new org.apache.xml.serialize.XMLSerializer(sw, outFormat);
    try {
    xmlser.serialize(your_document); //replace your_document with reference to document you want to serialize
    catch (Exception ex1) {
    }

  • Generic pretty print of DB content

    Hi,
    is there a better (generic) way to pretty print the content of a few records?
    So far i have this:
    set serveroutput on;
    create or replace function MakeDynamicBrowser(
         browserName in varchar2,
         tableName in varchar2)
    return integer
    is
         type StringTable_t is table of varchar2(256);
         columnNamesOrg StringTable_t;
         columnNames StringTable_t;
         types StringTable_t;
         stmt varchar2(32000);
         tableNameUpper varchar2(256) := upper(tableName);
    begin
         SELECT      column_name, translate(column_name, '-', '_') ,
              case data_type
              when 'NUMBER' then
                   decode(data_precision,
                        null, decode(data_scale,
                                  null, data_type, data_type || '('  || data_precision || ')'),
                        decode(data_scale,
                             null, data_type, data_type || '('  || data_scale ||' , ' || data_precision || ')')
              when 'VARCHAR2' then
                   case char_length
                   when null then
                        data_type
                   else
                        data_type || '(' || char_length     || ' char)'
                   end
              when 'TIMESTAMP(3) WITH TIME ZONE' then
                   data_type
              when 'DATE' then
                   data_type
              when 'RAW' then
                   data_type || '(' || data_length || ')'
              else
                   'unknown'
              end
         bulk collect into columnNamesOrg, columnNames, types
         from all_tab_columns
         where table_name = tableNameUpper
         order by column_id;
         if columnNames.count <= 0 then
              dbms_output.put_line(tableNameUpper || ': no columns!');
              return -1;
         end if;
         stmt :=
         'create or replace function ' || browserName || '( '                    || chr(10) ||
         '     headline in varchar2, '                                   || chr(10) ||
         '     curStr in varchar2) '                                   || chr(10) ||
         'return integer '                                        || chr(10) ||
         'as '                                                  || chr(10) ||
         '     cur sys_refcursor; '                                   || chr(10) ||
         '     type object_t is record ( '                              || chr(10);
         for i in columnNames.first..columnNames.last loop
              if i <> columnNames.first then
                   stmt := stmt ||     '     ,';
              end if;
              stmt := stmt || columnNames(i) || ' ' || types(i)               || chr(10);
         end loop;
         stmt := stmt ||
         '     ); '                                             || chr(10) ||
         '     type data_t is table of object_t; '                         || chr(10) ||
         '     data data_t; '                                        || chr(10) ||
         'begin '                                             || chr(10) ||
         '     dbms_output.put_line(headline); '                         || chr(10) ||
         '     open cur for curStr; '                                   || chr(10) ||
         '     fetch cur bulk collect into data; '                         || chr(10) ||
         '     if data.count = 0 then '                              || chr(10) ||
         '          dbms_output.put_line(''  ' || tableNameUpper || ': no data found!''); '
                                                           || chr(10) ||
         '     else '                                             || chr(10) ||
         '          for i in data.first..data.last loop '                    || chr(10) ||
         '          dbms_output.put_line('' #'' || i || '':''); '               || chr(10);
         for i in columnNames.first..columnNames.last loop
              stmt := stmt ||
         '               dbms_output.put_line(''  ' ||  columnNamesOrg(i) || ' = '' || data(i).' || columnNames(i)|| ');'
                                                           || chr(10);
         end loop;
         stmt := stmt ||
         '          end loop; '                                   || chr(10) ||
         '     end if; '                                        || chr(10) ||
         '     close cur; '                                        || chr(10) ||
         '     return 0; '                                        || chr(10) ||
         ' '                                                  || chr(10) ||
         'exception '                                             || chr(10) ||
         'when others then '                                        || chr(10) ||
         '     if cur%isopen then close cur; end if; '                         || chr(10) ||
            '     dbms_output.put_line(''' || browserName || '(): exception!''); '     || chr(10) ||
         '     return -1; '                                        || chr(10) ||
         'end; '                                                  || chr(10);
         execute immediate stmt;
         return 0;
    end;
    declare
         ret integer;
    begin
         ret := MakeDynamicBrowser('MyBrowser', 'V_$SESSION');
         execute immediate 'call MyBrowser' || '(''headline'', ''select * from V$SESSION where audsid = ' ||  userenv ('sessionid') || ''') into :ret' using out ret;
    end;
    /Output:
    SQL> @/tmp/test.sql
    Function created.
    headline
    #1:
    SADDR = 000000043B569268
    SID = 174
    SERIAL# = 55746
    AUDSID = 2964800
    PADDR = 000000043B430AF0
    USER# = 33
    USERNAME = USER
    COMMAND = 3
    OWNERID = 2147483644
    TADDR =
    LOCKWAIT =
    STATUS = ACTIVE
    SERVER = DEDICATED
    SCHEMA# = 33
    SCHEMANAME = USER
    OSUSER = oracle
    PROCESS = 26326
    MACHINE = padsol40
    TERMINAL = pts/42
    PROGRAM = sqlplus@padsol40 (TNS V1-V3)
    TYPE = USER
    SQL_ADDRESS = 00000003FD230BB8
    SQL_HASH_VALUE = 2822516303
    SQL_ID = 2rz6khyn3sbkg
    SQL_CHILD_NUMBER = 0
    PREV_SQL_ADDR = FFFFFFFF7D7C0DC0
    PREV_HASH_VALUE = 0
    PREV_SQL_ID = 0000000000000
    PREV_CHILD_NUMBER = 0
    PLSQL_ENTRY_OBJECT_ID = 4177672
    PLSQL_ENTRY_SUBPROGRAM_ID = 1
    PLSQL_OBJECT_ID =
    PLSQL_SUBPROGRAM_ID =
    MODULE = SQL*Plus
    MODULE_HASH = 3669949024
    ACTION =
    ACTION_HASH = 0
    CLIENT_INFO =
    FIXED_TABLE_SEQUENCE = 5800888
    ROW_WAIT_OBJ# = -1
    ROW_WAIT_FILE# = 0
    ROW_WAIT_BLOCK# = 0
    ROW_WAIT_ROW# = 0
    LOGON_TIME = 02-AUG-11
    LAST_CALL_ET = 0
    PDML_ENABLED = NO
    FAILOVER_TYPE = NONE
    FAILOVER_METHOD = NONE
    FAILED_OVER = NO
    RESOURCE_CONSUMER_GROUP =
    PDML_STATUS = DISABLED
    PDDL_STATUS = ENABLED
    PQ_STATUS = ENABLED
    CURRENT_QUEUE_DURATION = 0
    CLIENT_IDENTIFIER =
    BLOCKING_SESSION_STATUS = NOT IN WAIT
    BLOCKING_INSTANCE =
    BLOCKING_SESSION =
    SEQ# = 103
    EVENT# = 116
    EVENT = db file sequential read
    P1TEXT = file#
    P1 = 1
    P1RAW = 0000000000000001
    P2TEXT = block#
    P2 = 133185
    P2RAW = 0000000000020841
    P3TEXT = blocks
    P3 = 1
    P3RAW = 0000000000000001
    WAIT_CLASS_ID = 1740759767
    WAIT_CLASS# = 8
    WAIT_CLASS = User I/O
    WAIT_TIME = -1
    SECONDS_IN_WAIT = 0
    STATE = WAITED SHORT TIME
    SERVICE_NAME = testsys.padsol40.domain.com
    SQL_TRACE = DISABLED
    SQL_TRACE_WAITS = FALSE
    SQL_TRACE_BINDS = FALSE
    PL/SQL procedure successfully completed.It's incomplete for the types being recognized.
    And the reason for need to deal with the types in the first place is:
    Some tables use hyphen in columns names (e.g. v$transaction: DSCN-B, DSCN-W).
    That's why i need translation from '-' to '_' to be able to print.
    Otherwise '-' is recognized as minus operator (is there another way around w/o dealing with the types?).
    Another question:
    Is it possible to extend this to work with result of some cursor
    - e.g. returning result of joining #2 tables?
    best regards,
    Frank
    Edited by: user8704911 on Aug 2, 2011 4:52 AM

    Tom Kyte's print_table functionality?
    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1035431863958

  • Is there better way to do this?  (Xml Pretty Print | node removing)

    Hi all, I have been working at home on a small project to help my Java Jedi training. :-)
    My app saves quotes from authors in an xml file.
    I have a class [XmlRepository extends Thread] that holds control of an xml file to handle requests for Nodes.
    When I remove a node I get a Line Space above the node that was removed, or better put my node gets replaced by a empty line.
    Pretty print or correct Node removing.
    part of my xml is like this (I have resumed it for readability):
        <entities forUser="ffffffff-ffff-ffff-ffff-ffffffffffff">
            <quotes/>
            <authors>
                <author id="f156c570-c676-4d69-9b15-ae7d859ff771" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Poe</lastNames>
                    <firstNames>Edgar Allan</firstNames>
                </author>
                <author id="35dc0c5a-3813-4a10-af49-8d4ea1c2cee0" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Wilde</lastNames>
                    <firstNames>Oscar</firstNames>
                </author>
                <author id="317f72ea-add6-4bd2-8c63-d8b373a830ab" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Christie</lastNames>
                    <firstNames>Agatha</firstNames>
                </author>
                <author id="28047c89-b647-4c40-b6c7-677feaf2dfda" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Shakespeare</lastNames>
                    <firstNames>William</firstNames>
                </author>
            </authors>
        </entities>If I remove A Node ( Edgar Allan Poe (1st in this case)) the resulting Xml when saved is like this (I have added the space indentation just as it is outputted by my code):
        <entities forUser="ffffffff-ffff-ffff-ffff-ffffffffffff">
            <quotes/>
                <author id="35dc0c5a-3813-4a10-af49-8d4ea1c2cee0" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Wilde</lastNames>
                    <firstNames>Oscar</firstNames>
                </author>
                <author id="317f72ea-add6-4bd2-8c63-d8b373a830ab" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Christie</lastNames>
                    <firstNames>Agatha</firstNames>
                </author>
                <author id="28047c89-b647-4c40-b6c7-677feaf2dfda" languageCode="en" regenerateAs="com.fdt.cognoscere.entities.sources.Author">
                    <lastNames>Shakespeare</lastNames>
                    <firstNames>William</firstNames>
                </author>
            </authors>
        </entities>this is how I initialize the XML DOM Handlers, and the method for removing a Node:
         * Initializes factory instances and member variables.
        private void initialize() {
            //obtain an instance of a documentFactory create a document documentBuilder
            this.documentFactory = DocumentBuilderFactory.newInstance();
            //Configure the documentFactory to be name-space aware and validate trough an xsd file
            this.documentFactory.setNamespaceAware(true);
            this.documentFactory.setValidating(true);
            this.documentFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
            try {
                //obtain an instance of an XPathFactory
                this.xpathFactory = XPathFactory.newInstance(XPathFactory.DEFAULT_OBJECT_MODEL_URI);
                //obtain an instance of the xpath evaluator object
                this.xpathEvaluator = this.xpathFactory.newXPath();
                //set namespace mapping configurations
                NamespaceContextMap namespaceMappings = new NamespaceContextMap();
                namespaceMappings.put("xml", "http://www.w3.org/XML/1998/namespace");
                namespaceMappings.put("xmlns", "http://www.w3.org/2000/xmlns/");
                namespaceMappings.put("xsd", "http://www.w3.org/2001/XMLSchema");
                namespaceMappings.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
                namespaceMappings.put(this.schemaNamespaceMapping, this.schemaNamespace);
                //add mappings
                this.xpathEvaluator.setNamespaceContext(namespaceMappings);
            } catch (XPathFactoryConfigurationException ex) {
                Logger.getLogger(XmlRepository.class.getName()).log(Level.SEVERE, null, ex);
            try {
                //obtain a trasformer factory to save the file
                this.transformerFactory = TransformerFactory.newInstance();
                this.transformerFactory.setAttribute("indent-number", 4);
                //obtain the transforme
                this.transformer = this.transformerFactory.newTransformer();
                //setup transformer
                this.transformer.setOutputProperty(OutputKeys.METHOD, "xml");
                this.transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                this.transformer.setOutputProperty(OutputKeys.MEDIA_TYPE, "text");
                this.transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
            } catch (TransformerConfigurationException tcex) {
                Logger.getLogger(XmlRepository.class.getName()).log(Level.SEVERE, null, tcex);
         * Removes a node by evaluating the XPATH expression.
         * @param xpath A String instance with the XPATH expression representing the element to remove.
         * @throws com.fdt.cognoscere.storage.exceptions.UnableToRemoveException When an exception occurs that prevents the repository to execute the remove statement.
        public void removeNode(final String xpath) throws UnableToRemoveException {
            Node nodeToRemove = null;
            Node parentNode = null;
            //verify xpath
            if (xpath == null)
                throw new IllegalArgumentException("The xpath argument cannot be null.");
            //verify that the repository is loaded
            if (!this.loaded)
                throw new IllegalStateException("The XmlRepository faild to load properly and it is in an invalid state. It cannot perfom any operation.");
            try {
                //get the node to remove out of the xpath expression
                nodeToRemove = this.getNode(xpath);
                //throw an exception if no node was found to remove
                if (nodeToRemove == null)
                    throw new UnableToFindException("The node element trying to be remove does not exist.");
                //obtain the parent node to remove its child
                parentNode = nodeToRemove.getParentNode();
                //remove the node from the parent node
                nodeToRemove = parentNode.removeChild(nodeToRemove);
            } catch.......removed to save space{
            } finally {
                //normalize document
                this.document.normalize();
        }Please tell me if I could do this better,
    thanks,
    f(t)

    franciscodiaztrepat wrote:
    When I remove a node I get a Line Space above the node that was removed, or better put my node gets replaced by a empty line.Replaced? No, there's already a new-line character after the node that was removed. And there was one before that node too. You didn't remove either of those, so after the removal there are two consecutive new-line characters. As you can see.
    And no, trying to pretty-print the XML document won't remove any of those. It might add whitespace to make the document nicely indented, but it won't ever remove whitespace. If you want whitespace removed then you'll have to do it yourself.
    For example, after you remove a node, also remove the node following it if it's a whitespace text node. Or something like that.

  • Xerces 2.6, setIndent(0), 1.4.2 not working. XML always pretty printing

    Hello.
    I would like to take a string that contains xml and strip out all new lines, whitespace between tags, etc. So basically everything will be on one line.
    So I thought one simple way would be to run an XMLSerializer or use a Transformer. However, it's turning out to be a nightmare. I probably could have written a parser already. :)
    I've tried all possible combinations of
    XMLSerializer
    outputFormat.setIndenting(false)
    outputFormat.setIndent(0)
    outputFormat.setLineWidth(0)
    Transformer
    transformer.setOutputProperty("indent", "no")
    transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "0");For some reason, my XML is always pretty printed. And I can't figure it why. I was able to get the XMLSerializer version all on one line with an indent of 1, but the minute I switch to 0 it gets pretty printed.
    Here's some Transformer code I'm using:
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse( new InputSource( new StringReader(input)) );                      
    DOMSource source = new DOMSource(doc);
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "no");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "0");
    transformer.transform(source, new StreamResult(System.out));Output:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <trans_data>
      <input_data>
        <cc>1</cc>
      </input_data>
    </trans_data>I've tried both 2.6.2 and 2.5.0 of Xerces and my classpath only has XercesImpl.jar and xml-apis.jar in it. I'm using 1.4.2-07.
    Thanks,
    -- Jason

    public class XMLPrinter
         private static final String CLASSNAME = "XMLPrinter(): ";
         public static String print( String input )
            String methodName = "print(): ";
               String output = "";
            try
                DocumentBuilderFactory docBuilderFactory =
                    DocumentBuilderFactory.newInstance();
                DocumentBuilder docBuilder =
                    docBuilderFactory.newDocumentBuilder();
                Document doc = docBuilder.parse(
                    new InputSource( new StringReader(input)) );
                StringWriter stringWriter = new StringWriter();
                OutputFormat format = new OutputFormat( doc );
                                                 format.setIndenting( false );
                format.setLineWidth( 0 );
                format.setIndent( 0 );
                XMLSerializer serializer =
                   new XMLSerializer( stringWriter, format );
                serializer.serialize(doc);
                output = stringWriter.toString();
            catch (Exception e)
                output = null;
            return output;
         public static void main(String[] args)
            String XML =
            "<xml> <output>junk</output>    <output2>junk2</output2>\r\n<output3>output3</output3>\r\n</xml>\r\n";
            System.out.println(XMLPrinter.print(XML));
         }returns
    <?xml version="1.0" encoding="UTF-8"?>
    <xml> <output>junk</output>    <output2>junk2</output2> <output3>output3</output3> </xml>Switching to
    format.setLineWidth( 0 );
    format.setIndenting( true );
    format.setIndent( 10 );returns
    <?xml version="1.0" encoding="UTF-8"?>
    <xml>
              <output>junk</output>
              <output2>junk2</output2>
              <output3>output3</output3>
    </xml>

  • Xml formatting (pretty print, etc)

    Our MXML is getting a bit messy. (we also need a pretty
    printer and simple
    xml exploration and editing) for soap feeds.
    1. Is there something in Eclipse now that does this?
    2. Is there a publicly available plug-in
    3. Is there some simple (i.e. cheap or free tool) for doing
    this. XMLSpy
    would be overkill.

    Excellent directions, Yes, this is exactly what I needed to
    know. It now
    works fine.
    Only one item to note. Even though I did not set XMLBuddy as
    the default for
    *.mxml
    -- If I do the context menu (right click) and choose xml
    buddy, then it will
    stay sticky for that file the next time. The same as with
    using the
    FlexBuilder mxml editor. Not a real problem but what does
    "default" mean any
    more if the IDE is trying to be so smart as to decide for me
    what my default
    should be :-)
    "Mark Shepherd" <[email protected]> wrote in message
    news:[email protected]...
    > There is no XML or MXML formatting built-in to
    FlexBuilder or Eclipse.
    >
    > But don't despair, there are 100's of plugins available
    for eclipse, here
    > is one way that works...
    >
    > 1. install the XMLBuddy eclipse plug-in from
    xmlbuddy.com
    > 2. in flexbuilder, go to Window > Preferences >
    General > Editors > File
    > Associations
    > 3. select *.mxml in the top panel, then click "Add" in
    the bottom panel
    > 4. choose XMLBuddy, then OK, then OK
    >
    > You can now open any MXML file using the XML editor
    (xmlbuddy) rather than
    > FlexBuilder's normal MXML editor. To do this, select the
    file in the
    > Navigator panel, then right-click and choose Open With
    > XMLBuddy. Once
    > you are in the XML editor, you can select a range of
    text (or the entire
    > file, if you like) and choose Format from the XML menu.
    >
    > This technique will work for any XML-based file format,
    including MXML,
    > soap documents, RSS feeds, etc.
    >
    > There are probably other way to do this. Does anybody
    have other
    > suggestions?
    >
    > Mark Shepherd
    > FlexBuilder Engineering
    >
    >
    > Yechezkal Gutfreund wrote:
    >> Our MXML is getting a bit messy. (we also need a
    pretty printer and
    >> simple xml exploration and editing) for soap feeds.
    >>
    >> 1. Is there something in Eclipse now that does this?
    >>
    >> 2. Is there a publicly available plug-in
    >>
    >> 3. Is there some simple (i.e. cheap or free tool)
    for doing this. XMLSpy
    >> would be overkill.
    >>
    >>

  • Turn off 'pretty print' output from XLST processor

    How do I turn-off the "pretty-print" type output that the XSLT processor seems to generate? The XSLT processor seems intent on generating very pretty xml markup, all nicely indented. The problem is that if the markup is XHTML and you are feeding it to browsers they render things quite differently based on the white space between tags...annoying, but true. I have struggled with every swicth I could find on the parsers/processor or embedded in tags in the XSLT files....but nothing seems to work. All I want to do is have the markup I have created in the XSLT template be output 'as is' with the exception of any <xsl:> tag data substitution. How do I do this so things render correctly in my browser i.e maintain the white space and formatting I used in creating the XHTML tags?

    The only way that <xsl:output indent="no"> can behave as you are seeing is:
    (1) You're using a release before 2.0.2.6
    (2) Your program calls the processXSL()
    that returns a DocumentFragment instead
    of the one that writes to a PrintWriter
    (3) You are using our .\sample\XSLSample
    program which calls the processXSL
    to get a DocumentFragment (not the
    one that writes to the PrintWriter)
    Are you saying that our command-line oraxsl
    for version 2.0.2.6 on your stylesheet
    which includes <xsl:output> in the correct location in the stylesheet (outside of
    any template but inside the "top-level"
    <xsl:stylesheet> element) is not
    working properly? If so, will need
    a simple testcase.
    null

  • Any ideas on a nice BSP view pretty printer?

    Hi there,
    I am wondering whether somebody already tried to extend the SAP standard pretty printer by an own functionality which fits better for pages with mixed content, containing not only BSP-elements but also HTML-tags.
    The standard pretty printer considers everything as plain text which is not a BSP-element and leaves it unaltered. Only BSP-elements are arranged according to their tree structure.
    This produces ugly results for pages with mixed content.
    1.) Requirement
    A Pretty Printer for HTML-based BSP views should cover the following:
    (a) HTML-Tags and BSP-elements together form the chain. As in following example:
    <z:table table_id="testTab" binding="//test/gt_test" rows="5">
      <z:tableBody position="top">
        <colgroup>
          <col width="4%">
          <col width="96%">
        </colgroup>
      </z:tableBody>
      <z:column name="type" header="<%=zcl_bsp_util=>dtel_text_s('EDI_TTYP')%>"
                listPos="10"/>
      <z:column name="text" listPos="20"></z:column>
    </z:table>
    (b) Certain HTML formatting tags like I, B, etc. should not be added to the stack but be treated inline.
    (c) HTML-attribute names should be converted to lower case, the attribute values should be quoted.
    (d) Like for BSP-elements, there should be a threshold after which the attributes should appear in separate lines. Instead of a certain maximum "number of attributes", this could also be a maximum number of characters per line.
    (e) Scripting Tags (<% ... %>) should start at a new line, if the content contains new-lines.
    (f) Evaluation Scripting (<%= ... %>) should be inline, if they are contained within text nodes (and not within HTML oder BSP element nodes).
    (g) The Pretty Printer should be parametrizable (with parameters like indent-depth,... ).
    2.) Exits?
    Of course, one could always use an external HTML editor and write an add-on for that editor which produces the desired result. Or one could take the view content into the clipboard, paste it into a plain text editor like UltraEdit or TextPad which allows external commands, apply an external, self-written pretty printer to it and then paste the result back into the View. But it would be easier to use the "Pretty Printer" button directly to get the result. Therefore the question arises at which point the standard Pretty Printer Functionality could be modified or extended.
    I didn't find an exit. But the pretty-print itself is doubly-decoupled in the standard which minimizes the number of points where an extension has to be made:
    2.a) First decoupling point: The Fcode handler method pretty_printer_ext( ) in cl_o2_page is calling
    dynamically a method in cl_o2_co2_processor:
    * call pretty printer
      create object pp type ('CL_O2_CO2_PROCESSOR').
      appl_str = me->pagekey-applname.
      page_str = me->pagekey-pagekey.
      try.
          CALL METHOD pp->('PRETTY_PRINT')
            EXPORTING
              indent              = 2
              ATTRIBUTE_NORMALIZE = 'X'
              ATTRIBUTE_THRESHOLD = 2
              BSP_UNFORMATTED     = source
              appl                = appl_str
              page                = page_str
            IMPORTING
              test_ok             = test_ok
              BSP_FORMATTED       = pp_source.
        catch cx_o2_co2_exception into o2ex.
    2.b) Second decoupling point:
    The method pretty_print() of class cl_o2_co2_processor (fancy names, by the way. It seems that many former chemistry students had joined the BSP team ),
    there is a second delegation, to a local class, as follows:
      data pretty type ref to LCL_BSP_PRETTY_PRINT.
      pretty = LCL_BSP_PRETTY_PRINT=>getInstance( processor = me ).
    The real logic for doing the Pretty Print, finally, is performed in this local class.
    3.) Implementation.
    Since, up to my knowledge, there is no HTML parser in the ABAP world,
    the implementation could be based on existing HTML Parsers, like the Perl module Parser::HTML, or the Java package http://htmlparser.sourceforge.net/ . The pretty printer could then be called as external OS command.
    Are there any ideas out there? Or is there somebody who already worked in this direction?
    Regards,
    Rüdiger

    For those who are interested. I found out that the Dave Ragget's classic "HTML Tidy" (see <a href="http://tidy.sourceforge.net/">http://tidy.sourceforge.net/</a> )  is available in ABAP! There is a class CL_HTMLTIDY (at least here in my SAP_BASIS 700 system) which wraps calls of HTML Tidy by kernel modules.
    The class is undocumented, but there are 2 OSS notes of this year for it, so it might well be that it is alive.
    HTML Tidy can surely not directly be used for Pretty Printing BSP views, but for designing test cases or for doing things like HTML parsing, it might be a helpful tool.

  • ABAP Mapping Pretty Print

    Hi Everybody,
    I have an issue with linefeed in ABAP Mapping.The ouput document generated by ABAP Mapping is as follow:
    <?xml version="1.0" encoding="utf-8" ?<Header Node><T_H><SEND_ID value="XYZ"/>
    <REC_ID value="PQR"/>
    <DATE value="2007"/>
    </T_H>
    <O_H><L_NO value="252517"/>
    <W_NO value="298"/>
    <U_NO value="298"/>
    </O_H>
    </Header Node>
    If we can see the above payload, i have the <Header Node> coming in the same line as that of the utf-8 and also the subnode <T_H> starting in the same line and its first field <SEND_ID > in the same line.The same is repeating for the second subnode <O_H>. I want to do a pretty print for this payload.I have used the method <b>set_pretty_print( )</b> in the ABAP Mapping, but there is no effect of this on the output.
    To make it clear let me give the required output Xml
    <?xml version="1.0" encoding="utf-8" ?
    <Header Node>
    <T_H>
    <SEND_ID value="XYZ"/>
    <REC_ID value="PQR"/>
    <DATE value="2007"/>
    </T_H>
    <O_H>
    <L_NO value="252517"/>
    <W_NO value="298"/>
    <U_NO value="298"/>
    </O_H>
    </Header Node>
    Can anybody help me out on this.
    Thanks & Regards,
    Zabiula

    Insert a new line character as per the ABAP rules in the generated XML. It is normally "/n" for microsoft based languages. Not sure what it is in ABAP. May be an ABAPer must be able to help you.
    VJ

  • XmlDataProvider .... is gone completely in my Xaml file. Why? How many different ways to deal with xml data source through WPF

    I followed a procedure described in a book.
    1. insert "Inventory.xml" file to a project "WpfXmlDataBinding" .
    2. add the XML data source through the data panel of "blend for 2013", named it "InventoryXmlDataStore" and store it in the current document.
    3. dragged and droppped the nodes from the Data panel onto the artboard.
    Then I checked my Xaml file against the one provided by the book
    Xaml file by the book:
    <Window.Resources>
    <!-- This part is missing in my xaml file --><XmlDataProvider x:Key="InventoryDataSource"
    Source="\Inventory.xml"
    d:IsDataSource="True"/>
    <!-- This part is missing in my xaml file -->
    <DataTemplate x:Key="ProductTemplate">
    <StackPanel>
    <TextBlock Text="{Binding XPath=@ProductID}"/>
    <TextBlock Text="{Binding XPath=Cost}"/>
    <TextBlock Text="{Binding XPath=Description}"/>
    <CheckBox IsChecked="{Binding XPath=HotItem}"/>
    <TextBlock Text="{Binding XPath=Name}"/>
    </StackPanel>
    </DataTemplate>
    </Window.Resources>
    <Grid>
    <ListBox HorizontalAlignment="Left"
    ItemTemplate="{DynamicResource ProductTemplate}"
    ItemsSource="{Binding XPath=/Inventory/Product}"
    Margin="89,65,0,77" Width="200"/>
    </Grid>
    my Xaml file:
    <Window x:Class="WpfXmlDataBinding.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="922" Width="874">
    <Window.Resources>
    <DataTemplate x:Key="ProductTemplate">
    <StackPanel>
    <TextBlock Text="{Binding XPath=@ProductID}"/>
    <TextBlock Text="{Binding XPath=Cost}"/>
    <TextBlock Text="{Binding XPath=Description}"/>
    <CheckBox IsChecked="{Binding XPath=HotItem}"/>
    <TextBlock Text="{Binding XPath=Name}"/>
    </StackPanel>
    </DataTemplate>
    </Window.Resources>
    <Grid DataContext="{Binding Source={StaticResource InventoryXmlDataStore}}">
    <ListBox HorizontalAlignment="Left" Height="370"
    ItemTemplate="{DynamicResource ProductTemplate}"
    ItemsSource="{Binding XPath=/Inventory/Product}"
    Margin="65,55,0,0" VerticalAlignment="Top" Width="270"/>     
        </Grid>
    </Window>
    All looks quite the same except the <XmlDataProvider ....> part under <Window.Resources>, which is gone completely in my Xaml file.
    1, Why?
    2, How many different ways to deal with xml data source through WPF?
    Thanks, guys.
    (ps My "WpfXmlDataBinding" runs without problem through.)

    Never do yourself down Richard.
    Leave that to other people.
    It's quite common for smart developers to think they're not as good as they are.
    I coach a fair bit and it's a surprisingly common feeling.
    And to repeat.
    Never use anything ends .. provider.  They're for trivial demo apps.  Transform xml into objects and use them.  Write it back as xml.  Preferably, use a database.
    You want to read a little mvvm theory first.
    http://en.wikipedia.org/wiki/Model_View_ViewModel
    Whatever you do, don't read Josh Smiths explanation.  I used to recommend it but it confuses the heck out newbies. Leave that until later.
    Laurent Bugnion did a great presentation at mix10.  Unfortunately that doesn't seem to be working on the MS site, but I have a copy.  Download and watch:
    http://1drv.ms/1IYxl3z
    I'm writing an article at the moment which is aimed at beginners.
    http://social.technet.microsoft.com/wiki/contents/articles/30564.wpf-uneventful-mvvm.aspx
    The sample is just a collection of techniques really.
    I have a sample which involves no real data but is intended to illustrate some aspects of how viewmodels "do stuff" and how you use datatemplates to generate UI.
    I can't remember if I recommended it previously to you:
    https://gallery.technet.microsoft.com/WPF-Dialler-simulator-d782db17
    And I have working samples which are aimed at illustrating line of business architecture.  This is an incomplete step by step series but I  think more than enough to chew on once you've done the previous stuff.
    http://social.technet.microsoft.com/wiki/contents/articles/28209.wpf-entity-framework-mvvm-walk-through-1.aspx
    The write up for step2 is work in progress.
    https://gallery.technet.microsoft.com/WPF-Entity-Framework-MVVM-78cdc204
    Hope that helps.
    Recent Technet articles: Property List Editing;
    Dynamic XAML

  • Pretty Print

    Hi,
    Is there a 'pretty-print' extension, similar to the function
    in XML Spy except for HTML and Dreamweaver?
    Basically, it takes something like (a)
    And turns it into (b)
    Thanks
    Example:

    Um, do you mean somthng like the DW menu: Commands > Apply
    Source Formatting - ?
    Corona

  • Smartform : I s it possible to do pretty printer setting in Smartform codin

    Hi
    Is it possible to do pretty printer setting in Smartform so that coding can be ligned as we do in se38.
    Thanks

    HI,
    I basically created a 'Z' prog in dev env and copied all code to this did pretty print then copied 'as-is' back into smartform.
    long way around but did the trick..
    Thanks
    SB

  • Pretty printing Java in Studio 4

    ctrl-shift-f
    Pretty prints your Java code but wrapping on line continuations aren't indented.
    myFunction(param1,
    param2,
    param3)
    Is there a way to change this? We have lots of programmers with a variety of styles and the customer requires all code to use the same style. So if there was a simple way to standardize the code in a correct way it would be appreciated. No time to get all coders to same standard.
    thanks in advance

    Sorry for posting in this Forum.
    I'll post it in the installation forum.
    But, hey, feel free to help me!!!! :)

Maybe you are looking for

  • Mac Pro 1,1 3 display question

    I have a 1,1 Mac Pro with the ATI 5770. I currently am running a 30 inch cinema display on the DVI output and a 19 inch LCD on one of the mini ports using the following adapter: http://www.amazon.com/gp/product/B004071ZXA I was curious,since these 19

  • SQL Plus doesn't RPAD

    Hi All, I'm running into a peculiar problem where I'm trying to pool an oracle table that has about 30 million records into a text file. I'm using Toad for Oracle version 10.5. When I spool my results, I'm rpading a column to 54 characters with blank

  • Cannot format a USB 2 gb Flash Drive

    I received a 2 gb FLASH Drive from a supplier. It has their presentation and media information on it, but also has about 1.6 gb of free space. I want to now use this "Thumb Drive" to store other information; and I tried to reformat it for Mac (or Win

  • CJ20N-Reservation no. to be passed to PR during material component creation

    Hi, In CJ20N when the user creates a material component, PR is created automatically. In this PR, the Reservation no. should also be passed. I tried using enhancement COZF0002 and passed the reservation no. as under: EBAN_IMP-rsnum = RESBD_IMP-rsnum.

  • SPAN 2 ports on 2 2950's

    Hi, Can someone confirm either way whether it is possible or not to configure a single SPAN destination port on one 2950 to mirror one source port on itself and one source port on a second 2950 trunked together. I really wish to do this without requi