2016-11-23 2 views
0

Я использую SAX для преобразования XML-документа и удаления узлов с помощью таблицы стилей xsl: (благодаря teppic). Я не знаком с XML, чтобы понять, как редактировать документ.Поиск определенного узла в иерархии xml JAVA

XSL:

<!-- Copy --> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<!-- Strip IMFile elements --> 
<xsl:template match="IMFile"/> 

Это становится все узлы IMFile и удалять их отлично. Теперь мне нужно искать узлы типа: Вызвать и посмотреть, равен ли какой-либо из их дочернего элемента значение VectorNode TypeWinText, и если так удалить весь узел Callout. Если нет - ничего не делайте.

Project_Data Version="8.00"> 
<CSMLData> 
<GoProject id="1" version="3.0" > <Project id="2" editRate="30/1" version="3.0" > 
<Timeline id="6" > 
<GenericMixer id="10" name="Unified Mixer"> 
<Tracks> 
<GenericTrack id="11" > 
<Medias> 
<Callout id="91" start="55" duration="20" scalar="1/1" mediaStart="25/1" mediaDuration="20/1" > 
<Attributes> 
<Attribute id="130" name="vectorNode"> 
<VectorNode id="131" kind="TypeWinSVG" > </VectorNode> 

ответ

0

Попробуйте добавить еще один пустой шаблон, чтобы удалить Выноску основы в особых случаях:

<xsl:template match="Callout[descendant::VectorNode/@kind='TypeWinText']"/> 
+0

Я ценю это! Работает как шарм! – Torewin

0

В каком положении находится узел Callout, не могли бы вы быть более конкретными?

Для поиска, если узел имеет атрибут х вы могли бы сделать что-то вроде:

<xsl:template match="Keyframes"> 
<xsl:choose> 
     <xsl:when test="Keyframe/@value='x'"> 
       //do what you want for example 
      <xsl:value-of select="Keyframe/@value> 
       // this will print "x" 
     </xsl:when> 
</xsl:choose> 
</xsl:template> 

можно применить шаблон,

<xsl:apply-templates select="Keyframes"/> 
+0

GoProject/Project/Ti meline/GenericMixer/Tracks/GenericTrack/Medias/Callout/Attributes/Attribute/VectorNode <- get Атрибут «value» = x Нужно искать каждую выноску для этого значения x, а если true, удалите весь узел выноски. Я дам вашему примеру выстрел очень быстро! – Torewin

Смежные вопросы