我有这样的样式表,并没有按预期工作,我不确定从哪里开始。
这是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内的所有内容都应该被删除。
答案 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);
}