2009-04-03 6 views
2

Was ist der schnellste Weg, um eine doc wie zu konvertieren:Java XML-Parsing

<customermodel:Customer> 
    <creditCards> 
     <cardNumber>@0</cardNumber> 
     <provider>@HSBC</provider> 
     <xsi:type>@customermodel:CreditCard</xsi:type> 
      23242552 
    </creditCards> 
    . 
    . 

Damit die Elemente mit @ Attribute werden für das übergeordnete Element.

dh erhalten zu:

<customermodel:Customer> 
    <creditCards cardNumber="0" provider="HSBC" xsi-type="customermodel:CreditCard> 
     232323232 
    </creditCards> 
     . 
     . 

ein dom Verwendung? oder Sax Parser oder manuell? und ich kann die @ in die <>

+0

Verwendung vtd-xml, besser als DOM, SAX oder Ziehen aussehen. –

Antwort

1

verschieben Die beste Möglichkeit, direkt mit XML-Daten zu arbeiten, ist die Verwendung von XQuery. Es ist nicht die einfachste Sache zu lernen, aber wenn Sie viel mit XML arbeiten, ist es sehr nützlich.

Einige IDE unterstützen sogar XQuery-Bearbeitung (wie Oxygen XML).

http://de.wikipedia.org/wiki/XQuery http://www.oxygenxml.com/

1

Ich denke, XSLT ist der Weg zu gehen hilfreich sein.

Mehr Details here

Und ein SAX-Parser verwenden, es sei denn, Sie sehr gute Gründe haben.

2

Wenn Sie sich entscheiden, XSLT zu verwenden, wird es so etwas wie

<!-- process element and attributes first so that whitespace doesn't interfere --> 
    <xsl:template match="creditCards"> 
    <xsl:copy> 
     <xsl:apply-templates select="* | @*"/> 
     <xsl:apply-templates select="text()"/> 
    </xsl:copy>  
    </xsl:template> 

    <!-- change childrent of creditCards to attributes and strip first charcter from value --> 
    <xsl:template match="creditCards/*"> 
    <xsl:attribute name="{name()}"> 
     <xsl:value-of select="substring(., 2)"/> 
    </xsl:attribute> 
    </xsl:template> 

    <!-- rename xsi:type --> 
    <xsl:template match="creditCards/xsi:type"> 
    <xsl:attribute name="xsi-type"> 
     <xsl:value-of select="substring(., 2)"/> 
    </xsl:attribute> 
    </xsl:template> 

    <!-- identity transform --> 
    <xsl:template match="node() | @*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node() | @*"/> 
    </xsl:copy> 
    </xsl:template>