1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Development xml to plain text with xslt

Discussion in 'Software' started by ManStrike, 16 May 2005.

  1. ManStrike

    ManStrike What's a Dremel?

    Joined:
    29 Jan 2002
    Posts:
    58
    Likes Received:
    0
    I have an xml document
    Code:
    <INDI>@I14@
     <NAME>Charlie Accented /ANSEL/</NAME>
     <SEX>M</SEX>
     <BIRT>
      <DATE>15 JUN 1900</DATE>
     </BIRT>
     <DEAT>
      <DATE>5 JUL 1974</DATE>
     </DEAT>
     <FAMS>@F6@</FAMS>
     <FAMC>@F7@</FAMC>
     <NOTE>@N24@</NOTE>
     <CHAN>
      <DATE>11 Jan 2001
       <TIME>16:00:06</TIME>
      </DATE>
     </CHAN>
     <RIN>1</RIN>
    </INDI>
    
    that I need to change into a plan text formatted like this
    it needs the new lines and the leading numbers correspond to the death of each node
    Code:
    0 @I14@ INDI
    1 NAME Charlie Accented /ANSEL/
    1 SEX M
    1 BIRT
    2 DATE 15 JUN 1900
    1 DEAT
    2 DATE 5 JUL 1974
    1 FAMS @F6@
    1 FAMC @F7@
    1 NOTE @N24@
    1 CHAN
    2 DATE 11 Jan 2001
    3 TIME 16:00:06
    1 RIN 1
    
    I'm new to xslt and all I can find when researching it is stuff on xml to html etc I have already coded a program in c# that does this but I would like it done in xslt so I and other people can add more file formats latter
     
  2. Hepath

    Hepath Minimodder

    Joined:
    20 Oct 2003
    Posts:
    730
    Likes Received:
    0
    Here you go.

    Notes:
    1. The "<wibble>" and "<br>" elements are merely placeholders
    2. As count function is 1 based, subtract one for your zero base
    3. self::* ensures that the selected node is an element.
    4. If you need a line break, change the <br>.

    Code:
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method='xml' omit-xml-declaration='yes' />
            <xsl:template match="/">
                <wibble>
                    <xsl:apply-templates />
                </wibble>
            </xsl:template>
    
            <xsl:template match="node()">
                <xsl:if test="self::*">
                    <xsl:call-template name="node_depth" />
                    <xsl:text>  </xsl:text>
                    <xsl:value-of select="name()"/>
                    <xsl:text>  </xsl:text>
                    <xsl:value-of select="text()"/>
                    <br/>
                  </xsl:if>
                  <xsl:apply-templates />
            </xsl:template>
    
            <xsl:template name="node_depth" >
                    <xsl:value-of select="count(ancestor::node()) - 1" />
            </xsl:template>
    
    </xsl:stylesheet>
    
     
    Last edited: 17 May 2005
  3. ManStrike

    ManStrike What's a Dremel?

    Joined:
    29 Jan 2002
    Posts:
    58
    Likes Received:
    0
    thanks that's graet It will do the job perfectly :D
     
    Last edited: 17 May 2005
  4. ManStrike

    ManStrike What's a Dremel?

    Joined:
    29 Jan 2002
    Posts:
    58
    Likes Received:
    0
    is there any way of speeding the transformation process up as its painfully slow on a 500KB file
     
  5. Hepath

    Hepath Minimodder

    Joined:
    20 Oct 2003
    Posts:
    730
    Likes Received:
    0
    How long is it taking? I'll have a look for you.. but not sure.
     
  6. ManStrike

    ManStrike What's a Dremel?

    Joined:
    29 Jan 2002
    Posts:
    58
    Likes Received:
    0
    well it is going at 10KB a second
    I'm thinking this could be a problem with mono at this speed
    anyway here are my two files

    GEDCOM_5_5.xsl
    test2.xml 685KB

    plus the xml files can get larger then 100MB so I need speed
     

Share This Page