xslt样式表确认

时间:2017-02-13 21:32:49

标签: xml xslt

我有这样的样式表,并没有按预期工作,我不确定从哪里开始。

这是XML:

<Root>
<CSMLData>
<GoProject>
<Project>
<Timeline>
<GenericMixer>
<Tracks>
<Medias>
<Callout>
<Attributes>
<Attribute>
<Parameter>
<Keyframes>
<Keyframe id="xx" value="Transparent Hotspot"/>
</Keyframes>
</Parameter>
</Attribute>
</Attributes>
</Callout>
</Medias>
</Tracks>
</GenericMixer>
</Timeline>
</Project>
</GoProject>
</CSMLData>
</Root>

参数中有多个Keyframe类型的子项,但每个Keyframe中只有一个Keyframe。

这是样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!-- Strip IMFile elements -->
    <xsl:template match="Callout[descendant::Keyframe/@value='Transparent Hotspot']"/>
</xsl:stylesheet>

结果应该删除父Callout及其所有子节点,以便在条件满足时Callout内的所有内容都应该被删除。

1 个答案:

答案 0 :(得分:0)

这是用户错误。我正在使用这个使用Java应用样式表。以下是适用于我的代码。

private void removeTransparentHotspots(){
        XMLReader readerXML = null;
        try {
            readerXML = XMLReaderFactory.createXMLReader();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        TransformerFactory tf = TransformerFactory.newInstance();
        // Load the transformer definition from the file strip.xsl:
        InputStream i = MyClass.class.getResourceAsStream("strip.xsl");
        Transformer t = null;
        try {
            t = tf.newTransformer(new SAXSource(readerXML, new InputSource(i)));
        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            t.transform(new SAXSource(readerXML, new InputSource(new FileInputStream(getFile()))), new StreamResult(getFile()+"-tmp"));
        } catch (FileNotFoundException | TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Once everything is complete, delete old file..
        File tempFile = new File(getFile());
        tempFile.delete();

        // And rename tmp file's name to old file name
        File newFile = new File(getFile()+"-tmp");
        newFile.renameTo(tempFile);
    }