Xslt Удаление родительского элемента на основе значения дочернего элемента - PullRequest
0 голосов
/ 16 марта 2012

Схема выглядит следующим образом:

<root>
<publication>
<otherthanurl>blabla</otherthanurl>
</publication>
<publication>
<url>http://media.blabla.pdf</url>
</publication> 
<publication>
<url>http://media2.blabla.pdf</url>
</publication> 
<publication>
<url>http://otherblabla</url>
</publication> 
</root>

Я хочу скопировать весь контент, кроме элементов публикации, которые содержат элемент url, значение которого начинается с http://media или http://media3 И заканчивая .pdf

Есть идеи?

Мой начальный код:

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

  <xsl:template match="*[starts-with(name(), 'url')]"/>

Огромное спасибо, я потерян

1 Ответ

3 голосов
/ 17 марта 2012

Общая идея верна, только пустой шаблон неверен.Следующие работы:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1"/>

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

<xsl:template match="publication[descendant::url[(starts-with(.,'http://media.') 
or starts-with(.,'http://media3.')) and ends-with (., '.pdf')]]"/>

</xsl:stylesheet>

Простыми словами: скопируйте все, кроме публикации с потомком, являющимся элементом url, значение (.) Которого начинается / заканчивается указанными строками.Это xslt 1.0.

...