Avatar billede mercutio Nybegynder
07. oktober 2005 - 17:06 Der er 10 kommentarer og
1 løsning

problemer med parsning i java

Hej Eksperter.

Min xsl ser sådan ud.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:udk="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/" xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/" xmlns:pie="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/" xmlns:tpcm="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcm/" xmlns:tpcp="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcp/" xmlns:tpie="http://rep.oio.dk/ubl/xml/schemas/0p71/testpie/" xmlns:tpip="http://rep.oio.dk/ubl/xml/schemas/0p71/testpip/" xmlns:pip="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/" xmlns:pcm="http://rep.oio.dk/ubl/xml/schemas/0p71/pcm/" xmlns:pcp="http://rep.oio.dk/ubl/xml/schemas/0p71/pcp/">

    <xsl:output method="html" encoding="UTF-8" indent="yes" />
   

    <xsl:variable name="fakturatype">
        <xsl:choose>
            <xsl:when test="contains(/pie:Invoice/com:TypeCode, 'PIE')">FAKTURA</xsl:when>
            <xsl:when test="contains(/pip:Invoice/com:TypeCode, 'PIP')">FAKTURA</xsl:when>
            <xsl:when test="contains(/pcm:Invoice/com:TypeCode, 'PCM')">KREDITNOTA</xsl:when>
            <xsl:when test="contains(/pcp:Invoice/com:TypeCode, 'PCP')">KREDITNOTA</xsl:when>
            <xsl:otherwise>Ukendt dokumenttype</xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <xsl:template match="/">
        <html>
            <head>
                <title>
                   
                </title>
               
               
               
            </head>

            <body>
            OIOXML fakturavisning (<xsl:value-of select="/pie:Invoice/com:ID" />)
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Min xml ser således ud.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="C:\Documents and Settings\obi\Desktop\testxsl\short.xsl"?>
<Invoice xmlns="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/" xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/" xmlns:main="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/ http://rep.oio.dk/ubl/xml/schemas/0p71/pie/pielax.xsd">
    <com:ID>0000638887</com:ID>
   
</Invoice>

Når jeg parser det i en browser virker det fint. Når jeg parser det i xmlspy virker det også fint men hvis jeg parser det med denne metode

private String transform(Source source, Reader xslReader)
        throws Exception {
       
        Transformer transformer;
        TransformerFactory tFactory = TransformerFactory.newInstance();
        transformer = tFactory.newTransformer(new StreamSource(xslReader));

        Document xmlNew = null;

        DOMResult domResult = new DOMResult();
        transformer.transform(source, domResult);
        xmlNew = (Document) domResult.getNode();
        return XMLHelper.serialize(xmlNew);
    }

Så får jeg ingen værdi trukket ud. Nogen der ved hvorfor?
Avatar billede arne_v Ekspert
07. oktober 2005 - 17:31 #1
package october;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Transform {
    public static void main(String[] args) {
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer t = tf.newTransformer(new StreamSource(new FileInputStream("C:\\test.xsl")));
            t.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
            t.setOutputProperty(OutputKeys.METHOD, "html");
            t.transform(new StreamSource(new FileInputStream("C:\\test.xml")), new StreamResult(new FileOutputStream("C:\\test.html")));
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

virker fint hos mig med dine data filer
Avatar billede arne_v Ekspert
07. oktober 2005 - 17:32 #2
<html xmlns:pcp="http://rep.oio.dk/ubl/xml/schemas/0p71/pcp/" xmlns:pcm="http://rep.oio.dk/ubl/xml/schemas/0p71/pcm/" xmlns:pip="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/" xmlns:tpip="http://rep.oio.dk/ubl/xml/schemas/0p71/testpip/" xmlns:tpie="http://rep.oio.dk/ubl/xml/schemas/0p71/testpie/" xmlns:tpcp="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcp/" xmlns:tpcm="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcm/" xmlns:pie="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/" xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/" xmlns:udk="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/">
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
            OIOXML fakturavisning (0000638887)
            </body>
</html>
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:32 #3
hmm hvad kan forklaringen lige være på at det virker hos dig men ikke ved mig...

Måden jeg kalder min metode er sådan her.

Source xmlSource = new DOMSource(xmlDoc);
InputStream xslStream = new ByteArrayInputStream(result.getXsl());
InputStreamReader xslReader = new InputStreamReader(xslStream);
String transformed="";
try
{
transformed = transform(xmlSource, xslReader);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}

xmlDoc er et Document.
result.getXsl() returnerer et byte[] som er min xsl læst fra en blob i en tabel.

Mit resultat bliver sådan her.
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns:com="http://rep.oio.dk/ubl/xml/schemas/0p71/common/" xmlns:pcm="http://rep.oio.dk/ubl/xml/schemas/0p71/pcm/" xmlns:pcp="http://rep.oio.dk/ubl/xml/schemas/0p71/pcp/" xmlns:pie="http://rep.oio.dk/ubl/xml/schemas/0p71/pie/" xmlns:pip="http://rep.oio.dk/ubl/xml/schemas/0p71/pip/" xmlns:tpcm="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcm/" xmlns:tpcp="http://rep.oio.dk/ubl/xml/schemas/0p71/testpcp/" xmlns:tpie="http://rep.oio.dk/ubl/xml/schemas/0p71/testpie/" xmlns:tpip="http://rep.oio.dk/ubl/xml/schemas/0p71/testpip/" xmlns:udk="http://rep.oio.dk/ubl/xml/schemas/0p71/maindoc/"><head><title/></head><body>    OIOXML fakturavisning ()    </body></html>

Altså værdien kommer ikke med ud...
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:35 #4
var det ikke bedre at transformere til en ByteArrayOutputStream i.s.f. at gå
gennem et dokument ?
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:44 #5
Det hjalp lidt. Nu kan den vise mit resultat i browseren men jeg får stadig ikke værdien med ud.
Før kunne jeg ikke se det i browseren men kun se det hvis jeg trykkede view source...
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:46 #6
hvad indeholder dit output ?
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:49 #7
Jeg har fået det til at du nu. Jeg skiftede også min Source xmlSource = new DOMSource(xmlDoc); ud med new StreamSource(new ByteArrayInputStream(doc.getData())
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:52 #8
Der må på en eller anden måde være blevet ændret noget da jeg lavede mit byte[] om til et Document..
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:52 #9
Giver du et svar?
Avatar billede mercutio Nybegynder
07. oktober 2005 - 22:55 #10
Tusind tak for hjælpen :-) godnat.
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:58 #11
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester