0

xmlをパーツに分割してから、いくつかの変換を適用しようとしています。現在私はこのコードを持っています:



    public class XMLStax_xslt {

        static boolean allowStream = false;

        public static void main(String[] args) throws Exception {
            FileInputStream fis = new FileInputStream("SourceExternalFile.xml");        
            XMLInputFactory xmlif = null;
            xmlif = XMLInputFactory.newInstance();
            Source xslt = new StreamSource(new File("myTransformFile.xslt"));

            StreamFilter filter = new StreamFilter() {
                @Override
                public boolean accept(XMLStreamReader reader) {
                    int eventType = reader.getEventType();

                    if ( eventType == XMLEvent.START_ELEMENT )
                    {
                        String currentTag = reader.getLocalName();
                        if (currentTag.equals("wantedTag"))
                        {
                            allowStream = true;
                        }
                    }
                    if ( eventType == XMLEvent.END_ELEMENT )
                    {
                        String currentTag = reader.getLocalName();
                        if (currentTag.equals("wantedTag"))
                        {
                            allowStream = false;
                        }
                    }               
                    return allowStream;
                }
            };
            XMLStreamReader xmlR = xmlif.createFilteredReader(xmlif.createXMLStreamReader(fis),filter);
            while (xmlR.hasNext())
            {
                TransformerFactory transformerXSLT = TransformerFactory.newInstance();
                Transformer currentXslt = transformerXSLT.newTransformer(xslt);
                currentXslt.transform(new StAXSource(xmlR), new StreamResult("targetFile.xml"));
            }        
            fis.close();
        }   
    }

これは、行return allowStream;がに変更されたときに機能しreturn true;ます。したがって、XML全体を送信することはオプションではないため、必要なのは、必要な部分のみを変換に送信することです。

どうすればそれを達成できますか?

ありがとう。

4

1 に答える 1

0

問題は、ノード全体ではなく、文字列をトランスフォーマーに渡していたことです。によって変更XMLStreamReaderするXMLEventReaderことはトリックを行います。

変更点は次のとおりです。



    public static void main(String[] args) throws Exception {
            FileInputStream fis = new FileInputStream("SourceExternalFile.xml");        
            XMLInputFactory xmlif = null;
            xmlif = XMLInputFactory.newInstance();
            Source xslt = new StreamSource(new File("myTransformFile.xslt"));

            XMLEventReader xmlR = xmlif.createXMLEventReader(xmlif.createXMLStreamReader(fis));

            TransformerFactory transformerXSLT = TransformerFactory.newInstance();
            Transformer currentXslt = transformerXSLT.newTransformer(xslt);

            while (xmlR.hasNext())
            {
                XMLEvent xmlEvent = xmlR.nextEvent();
                if ( xmlEvent.equals("wantedTag") )
                {
                    currentXslt.transform(new StAXSource(xmlR), new StreamResult("targetFile.xml"));
                }
            }
            xmlR.close();
            fis.close();
        }


于 2012-06-29T21:18:01.643 に答える