2017-02-13 69 views
0

我有這個樣式表,它不工作如何打算,我不確定從這裏去哪裏。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> 

有內部參數類型關鍵幀的多個子女,但只有一個內部關鍵幀關鍵幀每個。

這是樣式表:

<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> 

結果應該刪除父標註和它的所有孩子裏面標註所以一切如果滿足的條件應該被刪除。

+1

請發佈一個格式良好的輸入XML示例以及預期輸出 - 請參見[mcve]。 –

+0

我用_Xalan_引擎使用_xsltransform.net_檢查了你的源代碼,它工作正常。還有一點意見:添加_ _。否則,_Root_標記與_ _行位於同一行。 或者使用_ _來消除_ _。 –

+0

您的實際XML是否有任何機會獲得默認名稱空間聲明?即在根元素上是否有'xmlns =「...」'? –

回答

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); 
    }