2017-02-13 13 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> 

Есть несколько детей типа Keyframes внутри параметра, но только один Keyframe внутри Keyframes для каждого.

Это стиль-лист:

<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

Я проверил ваши источники используя _xsltransform.net_ с движком _Xalan_, и он работает нормально. Еще одно замечание: Добавить _ _. В противном случае тег _Root_ находится в одной строке с _ _ строка. Или используйте _ _ для устранения _ _. –

+0

Действительно ли ваш фактический XML получил на нем декларацию пространства имен по умолчанию, случайно? i.e имеет ли он '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); 
    } 
Смежные вопросы