2017-07-06 2 views
0

Diese xml meine Beispieldatei,Kann die xml erhalten Attribute als Spaltennamen mit dem XSLT

<?xml version="1.0" encoding="ISO-8859-1"?> 
<FIXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2" xsi:schemaLocation="http://www.fixprotocol.org/FIXML-5-0-SP2 fixml-main-5-0-SP2_.xsd" s="2012-04-23" v="FIX.5.0SP2"> 
    <Batch ID="RPTTA111PUBLI20170518"> 
<MktDef MktID="XEEE" MktSegID="19478" EfctvBizDt="2017-05-22" NxtEfctvBizDt="2017-05-23" MktSeg="C1B1" MarketSegmentDesc="GERMAN INTRADAY CAP FUTURE" Sym="DE000A160PX2" ParentMktSegmID="FENE" Ccy="EUR" MktSegStat="1" USFirmFlag="Y" PartID="10"> 
    <MtchRules MtchRuleProdCmplx="1" MtchAlgo="PT"/> 
    <BaseTrdgRules QtSideInd="1" FastMktPctg="0"> 
    <TickRules TickRuleProdCmplx="1" StartTickPxRng="0" EndTickPxRng="99999.9999" TickIncr="0.001"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="0"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="1"/> 
    <PxRngRules PxRngRuleID="178" PxRngProdCmplx="1" StartPxRng="0" EndPxRng="99999.9999" PxRngValu="0.5"/> 
    </BaseTrdgRules> 
    <MDFeedTyps MDFeedTyp="L" MDBkTyp="2" MktDepth="5" MktDepthTmIntvl="3500" MDRcvryTmIntvl="30000" SvcLctnID1="224.0.50.82" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.210" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HS" MDBkTyp="2" MktDepth="10" MDRcvryTmIntvl="120000" SvcLctnID1="224.0.50.106" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.234" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HI" MDBkTyp="2" MktDepth="10" MktDepthTmIntvl="0" SvcLctnID1="224.0.50.107" SvcLctnSubID1="59501" SvcLctnID2="224.0.50.235" SvcLctnSubID2="59501"/> 
</MktDef> 
<SecDef PriSetPx="1.195"> 
    <Instrmt ID="483878" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-06-06" MMY="201706" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41222169" AltIDSrc="M"/> 
    <AID AltID="XF00000407B3" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-06-06"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19478"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="491139" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-07-05" MMY="201707" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41222170" AltIDSrc="M"/> 
    <AID AltID="XF0000046RY9" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-07-05"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19478"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<MktDef MktID="XEEE" MktSegID="19479" EfctvBizDt="2017-05-22" NxtEfctvBizDt="2017-05-23" MktSeg="C1B2" MarketSegmentDesc="GERMAN INTRADAY CAP FUTURE" Sym="DE000A160PY0" ParentMktSegmID="FENE" Ccy="EUR" MktSegStat="1" USFirmFlag="Y" PartID="10"> 
    <MtchRules MtchRuleProdCmplx="1" MtchAlgo="PT"/> 
    <BaseTrdgRules QtSideInd="1" FastMktPctg="0"> 
    <TickRules TickRuleProdCmplx="1" StartTickPxRng="0" EndTickPxRng="99999.9999" TickIncr="0.001"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="0"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="1"/> 
    <PxRngRules PxRngRuleID="178" PxRngProdCmplx="1" StartPxRng="0" EndPxRng="99999.9999" PxRngValu="0.5"/> 
    </BaseTrdgRules> 
    <MDFeedTyps MDFeedTyp="L" MDBkTyp="2" MktDepth="5" MktDepthTmIntvl="3500" MDRcvryTmIntvl="30000" SvcLctnID1="224.0.50.82" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.210" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HS" MDBkTyp="2" MktDepth="10" MDRcvryTmIntvl="120000" SvcLctnID1="224.0.50.106" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.234" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HI" MDBkTyp="2" MktDepth="10" MktDepthTmIntvl="0" SvcLctnID1="224.0.50.107" SvcLctnSubID1="59501" SvcLctnID2="224.0.50.235" SvcLctnSubID2="59501"/> 
</MktDef> 
<SecDef PriSetPx="0.587"> 
    <Instrmt ID="483879" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-06-13" MMY="201706" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41287705" AltIDSrc="M"/> 
    <AID AltID="XF00000407C1" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-06-13"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19479"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="493745" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-07-12" MMY="201707" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41287706" AltIDSrc="M"/> 
    <AID AltID="XF0000049F05" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-07-12"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19479"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<MktDef MktID="XEEE" MktSegID="19480" EfctvBizDt="2017-05-22" NxtEfctvBizDt="2017-05-23" MktSeg="C1B3" MarketSegmentDesc="GERMAN INTRADAY CAP FUTURE" Sym="DE000A160PZ7" ParentMktSegmID="FENE" Ccy="EUR" MktSegStat="1" USFirmFlag="Y" PartID="10"> 
    <MtchRules MtchRuleProdCmplx="1" MtchAlgo="PT"/> 
    <BaseTrdgRules QtSideInd="1" FastMktPctg="0"> 
    <TickRules TickRuleProdCmplx="1" StartTickPxRng="0" EndTickPxRng="99999.9999" TickIncr="0.001"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="0"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="1"/> 
    <PxRngRules PxRngRuleID="178" PxRngProdCmplx="1" StartPxRng="0" EndPxRng="99999.9999" PxRngValu="0.5"/> 
    </BaseTrdgRules> 
    <MDFeedTyps MDFeedTyp="L" MDBkTyp="2" MktDepth="5" MktDepthTmIntvl="3500" MDRcvryTmIntvl="30000" SvcLctnID1="224.0.50.82" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.210" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HS" MDBkTyp="2" MktDepth="10" MDRcvryTmIntvl="120000" SvcLctnID1="224.0.50.106" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.234" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HI" MDBkTyp="2" MktDepth="10" MktDepthTmIntvl="0" SvcLctnID1="224.0.50.107" SvcLctnSubID1="59501" SvcLctnID2="224.0.50.235" SvcLctnSubID2="59501"/> 
</MktDef> 
<SecDef PriSetPx="0.777"> 
    <Instrmt ID="483880" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-06-21" MMY="201706" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41353241" AltIDSrc="M"/> 
    <AID AltID="XF00000407D9" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-06-21"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19480"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="495690" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-07-19" MMY="201707" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41353242" AltIDSrc="M"/> 
    <AID AltID="XF000004B602" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-07-19"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19480"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<MktDef MktID="XEEE" MktSegID="19481" EfctvBizDt="2017-05-22" NxtEfctvBizDt="2017-05-23" MktSeg="C1B4" MarketSegmentDesc="GERMAN INTRADAY CAP FUTURE" Sym="DE000A160P05" ParentMktSegmID="FENE" Ccy="EUR" MktSegStat="1" USFirmFlag="Y" PartID="10"> 
    <MtchRules MtchRuleProdCmplx="1" MtchAlgo="PT"/> 
    <BaseTrdgRules QtSideInd="1" FastMktPctg="0"> 
    <TickRules TickRuleProdCmplx="1" StartTickPxRng="0" EndTickPxRng="99999.9999" TickIncr="0.001"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="0"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="1"/> 
    <PxRngRules PxRngRuleID="178" PxRngProdCmplx="1" StartPxRng="0" EndPxRng="99999.9999" PxRngValu="0.5"/> 
    </BaseTrdgRules> 
    <MDFeedTyps MDFeedTyp="L" MDBkTyp="2" MktDepth="5" MktDepthTmIntvl="3500" MDRcvryTmIntvl="30000" SvcLctnID1="224.0.50.82" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.210" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HS" MDBkTyp="2" MktDepth="10" MDRcvryTmIntvl="120000" SvcLctnID1="224.0.50.106" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.234" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HI" MDBkTyp="2" MktDepth="10" MktDepthTmIntvl="0" SvcLctnID1="224.0.50.107" SvcLctnSubID1="59501" SvcLctnID2="224.0.50.235" SvcLctnSubID2="59501"/> 
</MktDef> 
<SecDef PriSetPx="1.11"> 
    <Instrmt ID="478944" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-05-23" MMY="201705" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41418776" AltIDSrc="M"/> 
    <AID AltID="XF000003VLD7" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-05-23"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19481"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="488484" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-06-28" MMY="201706" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41418777" AltIDSrc="M"/> 
    <AID AltID="XF0000044BK7" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-06-28"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19481"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<MktDef MktID="XEEE" MktSegID="19482" EfctvBizDt="2017-05-22" NxtEfctvBizDt="2017-05-23" MktSeg="C1B5" MarketSegmentDesc="GERMAN INTRADAY CAP FUTURE" Sym="DE000A160P13" ParentMktSegmID="FENE" Ccy="EUR" MktSegStat="1" USFirmFlag="Y" PartID="10"> 
    <MtchRules MtchRuleProdCmplx="1" MtchAlgo="PT"/> 
    <BaseTrdgRules QtSideInd="1" FastMktPctg="0"> 
    <TickRules TickRuleProdCmplx="1" StartTickPxRng="0" EndTickPxRng="99999.9999" TickIncr="0.001"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="0"/> 
    <QuotSizeRules MinBidSz="1" MinOfrSz="1" FastMktInd="1"/> 
    <PxRngRules PxRngRuleID="178" PxRngProdCmplx="1" StartPxRng="0" EndPxRng="99999.9999" PxRngValu="0.5"/> 
    </BaseTrdgRules> 
    <MDFeedTyps MDFeedTyp="L" MDBkTyp="2" MktDepth="5" MktDepthTmIntvl="3500" MDRcvryTmIntvl="30000" SvcLctnID1="224.0.50.82" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.210" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HS" MDBkTyp="2" MktDepth="10" MDRcvryTmIntvl="120000" SvcLctnID1="224.0.50.106" SvcLctnSubID1="59500" SvcLctnID2="224.0.50.234" SvcLctnSubID2="59500"/> 
    <MDFeedTyps MDFeedTyp="HI" MDBkTyp="2" MktDepth="10" MktDepthTmIntvl="0" SvcLctnID1="224.0.50.107" SvcLctnSubID1="59501" SvcLctnID2="224.0.50.235" SvcLctnSubID2="59501"/> 
</MktDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="483881" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-06-29" MMY="201706" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41484313" AltIDSrc="M"/> 
    <AID AltID="XF00000407E7" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-06-29"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19482"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
<SecDef PriSetPx="0.001"> 
    <Instrmt ID="491783" Src="M" SecTyp="FUT" Status="1" ProdCmplx="1" CFI="FFMCSX" MatDt="2017-07-06" MMY="201707" Mult="168" ValMeth="FUT" SettlMeth="C" PxPrcsn="3" MinPxIncr="0.001" MinPxIncrAmt="0.001"> 
    <AID AltID="41484314" AltIDSrc="M"/> 
    <AID AltID="XF0000047E32" AltIDSrc="4"/> 
    <Evnt EventTyp="7" Dt="2017-07-06"/> 
    </Instrmt> 
    <MktSegGrp MktSegID="19482"> 
    <SecTrdgRules> 
     <BaseTrdgRules> 
     <PxRngRules PxRngRuleID="178"/> 
     </BaseTrdgRules> 
    </SecTrdgRules> 
    </MktSegGrp> 
</SecDef> 
    </Batch> 
</FIXML> 

Und das ist mein XSLT-Code,

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:x="http://www.fixprotocol.org/FIXML-5-0-SP2" 
          xsi:schemaLocation="http://www.fixprotocol.org/FIXML-5-0-SP2 fixml-main-5-0-SP2_.xsd" 
          xmlns:math="http://www.w3.org/2005/xpath-functions/math" 
          exclude-result-prefixes="xs math"> 

    <xsl:mode streamable="yes"/> 
    <xsl:output method="text" encoding="utf-8" /> 

    <xsl:param name="delim" select="','" /> 
    <xsl:param name="quote" select="'&quot;'" /> 
    <xsl:param name="break" select="'&#xA;'" /> 

    <xsl:template match="x:PxRngRules"> 

<xsl:value-of select="concat($quote, normalize-space(@PxRngRuleID), $quote)" /><xsl:value-of select="$delim" /> 
<xsl:value-of select="concat($quote, normalize-space(@PxRngProdCmplx), $quote)" /><xsl:value-of select="$delim" /> 
<xsl:value-of select="concat($quote, normalize-space(@StartPxRng), $quote)" /><xsl:value-of select="$delim" /> 
<xsl:value-of select="concat($quote, normalize-space(@EndPxRng), $quote)" /><xsl:value-of select="$delim" /> 
<xsl:value-of select="concat($quote, normalize-space(@PxRngValu), $quote)" /><xsl:value-of select="$delim" /> 

Problem 1 : Ich versuche, den folgenden Code hinzuzufügen, um die Attributnamen als Spaltennamen zu erhalten

<xsl:template match="/"> 
    <xsl:text>PxRngRuleID,PxRngProdCmplx,StartPxRng,EndPxRng,PxRngValu</xsl:text> 
<xsl:text>&#xA;</xsl:text> 
    </xsl:template> 

Aber was ich bekomme, sind alle Spaltennamen, aber nicht die Werte.

Dies ist die Beispielausgabe, die ich bekomme, nachdem ich den obigen Code vor xsl: template hinzugefügt habe.

PxRngRuleID PxRngProdCmplx StartPxRng EndPxRng PxRngValu 
    PxRngRuleID PxRngProdCmplx StartPxRng EndPxRng PxRngValu 
    PxRngRuleID PxRngProdCmplx StartPxRng EndPxRng PxRngValu 

Problem 2: Wenn ich Attribute einige weitere Spalten des Mutternamen hinzufügen möchten, was sind dann alle Änderungen, die ich tun? zum Beispiel, wenn ich die andere Spalte mit "QtSideInd" im Eltern-Tag und "MktSegID" im Tag hinzufügen möchte.

Ich habe unten versucht, aber nicht in der Lage, die Werte zu erhalten,

<xsl:value-of select="concat($quote, normalize-space(../@QtSideInd), $quote)" /><xsl:value-of select="$delim" /> 
<xsl:value-of select="concat($quote, normalize-space(../../@MktSegID), $quote)" /><xsl:value-of select="$delim" /> 

Das ist mein Java-Code ist ...

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.text.ParseException; 

import javax.xml.namespace.QName; 
import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLStreamException; 
import javax.xml.stream.XMLStreamReader; 
import javax.xml.transform.Result; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stax.StAXSource; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

    public class ChunkXSLT { 

public static int transform(InputStream is, OutputStream os, Transformer transformer, QName name) throws XMLStreamException, TransformerException { 
    long time1 = System.nanoTime(); 
    // Open input & output files 
    XMLInputFactory factory = XMLInputFactory.newInstance(); 
    factory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); 
    factory.setProperty(XMLInputFactory.IS_VALIDATING, false); 
    XMLStreamReader reader = factory.createXMLStreamReader(is); 
    // In case you want to check which implementation is used. 
    // Woodstox is a bit faster, but not worth adding extra dependency. 


    Result result = new StreamResult(os); 

    int count = 0; 
    while (reader.hasNext()) { 
     if (reader.getEventType() == XMLStreamReader.START_ELEMENT && name.equals(reader.getName())) { 
      // System.out.println("FOUND " + count); 
      count++; 
      transformer.transform(new StAXSource(reader), result); 
      if (count % 1000 == 0) { 
       long time2 = System.nanoTime(); 
       double ms = (time2 - time1)/1000000.0; 
       System.out.format("Time=%.2fms Rows=%d%n", ms, count); 
      } 
     } else if (reader.getEventType() == XMLStreamReader.START_ELEMENT) { 
//     System.out.println("Start "+reader.getName()+" != "+name); 
     } 
     reader.next(); 
    } 
    long time2 = System.nanoTime(); 
    double ms = (time2 - time1)/1000000.0; 
    System.out.format("Total Time=%.2fms Total rows=%d%n", ms, count); 
    return count; 
} 

public static void main(String arg[]) throws Exception { 
    // Parse command line options 
    File xsltFile; 
    File inputFile; 
    File outputFile; 
    String tagName; 
    String namespace; 
    try { 
     String xsltFileName = parse("-x", arg, "XSLT sheet", true); 
     String inputFileName = parse("-f", arg, "Input file", true); 
     String outputFileName = parse("-o", arg, "Output file", true); 
     tagName = parse("-t", arg, "Tag name", true); 
     namespace = parse("-n", arg, "Tag Namespace URL", false); 
     xsltFile = new File(xsltFileName); 
     inputFile = new File(inputFileName); 
     outputFile = new File(outputFileName); 
    } catch (ParseException e) { 
     System.err.println(e.getMessage()); 
     System.err.println("Syntax: ChunkXSLT -f <input file> -o <output file> -x <XSLT stylesheet> -t <Tag name> [-n <namespace URL>]"); 
     System.err.println("Will split given file on given tag with given namespace."); 
     System.err.println("Will process contents of each tag using given XSLT."); 
     System.exit(1); 
     return; 
    } 
    if (!xsltFile.exists()) { 
     System.err.println("File not found " + xsltFile.getAbsolutePath()); 
     System.exit(1); 
    } 
    if (!inputFile.exists()) { 
     System.err.println("File not found " + inputFile.getAbsolutePath()); 
     System.exit(1); 
    } 

    // Open XSLT stylesheet 
    StreamSource stylesource = new StreamSource(xsltFile); 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource); 

    // Create XML tag name which is used to break up XML into rows 
    final QName name; 
    if (namespace != null) { 
     name = new QName(namespace, tagName); 
    } else { 
     name = new QName(tagName); 
    } 
    System.out.println("Will look for tag " + name + " in namespace " + namespace); 

    FileOutputStream fos = null; 
    FileInputStream fis = null; 
    try { 
     // Open input & output files 
     fis = new FileInputStream(inputFile); 
     fos = new FileOutputStream(outputFile); 
     transform(fis, fos, transformer, name); 
    } finally { 
     if (fos != null) { 
      fos.close(); 
     } 
     if (fis != null) { 
      fis.close(); 
     } 
    } 
} 

// Teo - inefficient, but who cares 
private static String parse(String option, String[] arg, String desc, boolean required) throws ParseException { 
    for (int i = 0; i < arg.length; i++) { 
     if (option.equals(arg[i])) { 
      if (i + 1 < arg.length) { 
       String value = arg[i + 1].trim(); 
       return value; 
      } else { 
       throw new ParseException(option + " must be followed by an argument", i); 
      } 
     } 
    } 
    if (required) { 
     throw new ParseException(desc + " is required", 0); 
    } else { 
     return null; 
    } 
} 
} 

Antwort

0

ändern

<xsl:template match="/"> 
    <xsl:text>PxRngRuleID,PxRngProdCmplx,StartPxRng,EndPxRng,PxRngValu</xsl:text> 
<xsl:text>&#xA;</xsl:text> 
    </xsl:template> 

zu

<xsl:template match="/"> 
    <xsl:text>PxRngRuleID,PxRngProdCmplx,StartPxRng,EndPxRng,PxRngValu</xsl:text> 
    <xsl:text>&#xA;</xsl:text> 
    <xsl:apply-templates select="descendant::x:PxRngRules"/> 
    </xsl:template> 

um sicherzustellen, dass diese Elemente von der von Ihnen geschriebenen Vorlage verarbeitet werden.

+0

Damit bin ich in der Lage, die Werte zu erhalten, aber es gibt ein Problem, die Spaltennamen wiederholen sich auch jedes Mal. –

+0

Ich habe mir nur das XSLT angesehen und das korrigiert. Es scheint, dass yo java code versucht, das selbe Stylesheet wiederholt aufzurufen, also würde man natürlich die Ausgabe wiederholen. Es ist nicht klar, warum Sie das tun und was Sie auf diese Weise erreichen wollen. –

+0

Hallo Martin, das ist eigentlich nicht komplett von mir geschrieben. Wenn möglich könntest du mir bitte einen guten Ansatz im Code w.r.t xslt vorschlagen, der gute Leistung und bessere Ausführungszeit w.r. aktuellen Code haben wird. Danke im Voraus! –

Verwandte Themen