XML - помощь в удалении публикуемых узлов - PullRequest
0 голосов
/ 02 ноября 2010

Любая помощь высоко ценится по этому вопросу.

Я бы хотел удалить некоторые узлы из публикации в ленте из внешнего XML-файла, который я создал с помощью xslt. Вот канал: http://www.wcwg.info/feeds/localevents.aspx?a=00392&p=CM159EH&m=20.

Узлы, которые я хотел бы удалить:

Местные события размещены на WhereCanWeGo.com.00392CM15 9EH31 / 10/1007 / 11/1010001111111111111111111031 октября 2010 http://www.wherecanwego.com/events/signin.aspxww.wherecanwego.com/events/signin.aspx

Может ли кто-нибудь быть достаточно любезным, чтобы указать мне, как удалить эти начальные узлы (параметры)? Это почтовый индекс, номер счета, URL фида и т. Д.

Я отчаянно пытаюсь закончить это, но это последнее препятствие! Большое спасибо заранее всем, кто откликнется ...

Таблица стилей (фрагмент)

<xsl:template match="/"> 
  <xsl:apply-templates/>   
</xsl:template> 

 <xsl:template match="item"> 
  <div class="local_events"> 
    <xsl:apply-templates select="title"/>   
    <xsl:apply-templates select="Venue"/> 
    <xsl:apply-templates select="Times"/> 
    <xsl:apply-templates select="Dates"/> 
    <xsl:apply-templates select="DetailsURL"/> 
  </div><div style="height:1px;border-bottom:1px dotted #cfcfcf;"></div> 
 </xsl:template> 

<xsl:template match="title"> 
  <h2><a class="title" target="_blank" rel="nofollow" href="{../DetailsURL}"><xsl:value-of select="."/></a></h2> 
</xsl:template> 

<xsl:template match="Venue"> 
  <span>Location: </span> 
  <xsl:value-of select="."/> 
  <br /> 
</xsl:template> 

<xsl:template match="Times"> 
  <span>Details: </span> 
  <xsl:value-of select="."/> 
  <br /> 
</xsl:template> 

<xsl:template match="Dates"> 
  <span>Dates: </span> 
  <xsl:value-of select="."/> 
</xsl:template> 

<xsl:template match="DetailsURL"> 
   <a style="font-weight:normal;margin-left:0.5em;" target="_blank" rel="nofollow" href="{.}"><xsl:text>Full details...</xsl:text></a> 
</xsl:template> 

Ответы [ 4 ]

0 голосов
/ 02 ноября 2010

Другая прибл. Эта таблица стилей:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:preserve-space elements="Times"/>
    <xsl:template match="text()"/>
    <xsl:template match="item">
        <div class="local_events">
            <xsl:apply-templates/>
        </div>
        <div style="height:1px;border-bottom:1px dotted #cfcfcf;"></div>
    </xsl:template>
    <xsl:template match="title">
        <h2>
            <a class="title" target="_blank" rel="nofollow" href="{../DetailsURL}">
                <xsl:value-of select="."/>
            </a>
        </h2>
    </xsl:template>
    <xsl:template match="Venue">
        <span>Location: </span>
        <xsl:value-of select="."/>
        <br />
    </xsl:template>
    <xsl:template match="Times">
        <span>Details: </span>
        <xsl:value-of select="."/>
        <br />
    </xsl:template>
    <xsl:template match="Dates">
        <span>Dates: </span>
        <xsl:value-of select="."/>
    </xsl:template>
    <xsl:template match="DetailsURL">
        <a style="font-weight:normal;margin-left:0.5em;" target="_blank" rel="nofollow" href="{.}">
            <xsl:text>Full details...</xsl:text>
        </a>
    </xsl:template>
</xsl:stylesheet>

Примечание : при выполнении преобразования один в один в одной и той же иерархии достаточно объявить правила для определенных элементов в исходном источнике и перезаписать встроенное правило для текстового узла (вывести строку значение) с пустым правилом.

0 голосов
/ 02 ноября 2010

Из вашего плохо сформулированного вопроса и анализа канала кажется, что вы хотите избавиться от всех дочерних элементов верхнего (LocalEvents) узла, которые не названы item.

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="/*/*[not(self::item)]"/>
</xsl:stylesheet>

при применении к предоставленному каналу (http://www.wcwg.info/feeds/localevents.aspx?a=00392&p=CM159EH&m=20), дает желаемый результат .

Примечание: как требуемые элементы удаляются (не обрабатываются, игнорируются) пустым шаблоном, который соответствует им и переопределяет правило идентификации , которое используется для копирования остальных узлов «как есть».

0 голосов
/ 02 ноября 2010

Теперь это исправлено для следующего, который теперь работает, для всех, кто находится в той же ситуации:

<xsl:template match="/">
  <xsl:apply-templates select="/LocalEvents/item"/>    
</xsl:template>

 <xsl:template match="item">
  <div class="local_events">
    <xsl:apply-templates select="title"/>  
    <xsl:apply-templates select="Venue"/>
    <xsl:apply-templates select="Times"/>
    <xsl:apply-templates select="Dates"/>
    <xsl:apply-templates select="DetailsURL"/>
  </div><div style="height:1px;border-bottom:1px dotted #cfcfcf;"></div>
 </xsl:template>

<xsl:template match="title">
  <h2><a class="title" target="_blank" rel="nofollow" href="{../DetailsURL}"><xsl:value-of select="."/></a></h2>
</xsl:template>

<xsl:template match="Venue">
  <span>Location: </span>
  <xsl:value-of select="."/>
  <br />
</xsl:template>

<xsl:template match="Times">
  <span>Details: </span>
  <xsl:value-of select="."/>
  <br />
</xsl:template>

<xsl:template match="Dates">
  <span>Dates: </span>
  <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="DetailsURL">
   <a style="font-weight:normal;margin-left:0.5em;" target="_blank" rel="nofollow" href="{.}"><xsl:text>Full details...</xsl:text></a>
</xsl:template>

</xsl:stylesheet>
0 голосов
/ 02 ноября 2010

Если вы уже используете таблицу стилей XSLT, которая не выполняет то, что вам нужно, пожалуйста, опубликуйте таблицу стилей или ссылку на нее.[edit] В вашей опубликованной таблице стилей измените

<xsl:template match="/">
  <xsl:apply-templates/>  
</xsl:template>

на

<xsl:template match="/">
  <xsl:apply-templates select="//item"/>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...