Исключить теги из XML-файла с использованием XSLT

Есть XML-файл (sheet1.xml, часть xlsx-файла), содержащий следующий фрагмент:

<c r="A1" t="s">
<v>0</v>
</c>
<c r="B1" t="s">
<v>1</v>
</c>
<c r="C1" t="s">
<v>2</v>
</c>
<c r="D1" s="1">
<v>256000</v>
</c>
<c r="D2" s="2">
<v>257000</v>
</c>

Необходимо вывести все значения:

  1. заключенные в теге <v>,
  2. но при этом убрать все значения, имеющие в теге <c> атрибут t="s"

Первую часть задачи решил при помощи XSLT-файла:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">

  <xsl:output omit-xml-declaration="yes"/>

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

  <xsl:template match="x:v">
    <p>
      <xsl:value-of select="." />
    </p>
  </xsl:template>

</xsl:stylesheet>

Теперь на выходе у меня получается файл с содержимым:

<div xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<p>0</p>
<p>1</p>
<p>2</p>
<p>256000</p>
<p>257000</p>
</div>

А хотелось бы увидеть вот такой:

<div xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<p>256000</p>
<p>257000</p>
</div>

Можно ли это как-нибудь реализовать?


Ответы (2 шт):

Автор решения: Yitzhak Khabinsky

#1-4 не предоставлены. Вот почему я не вижу ваши пространства имен. Попробуйте изменить второй шаблон XSLT как следующее:

match="//v[parent::c[not(@t='s')]]"
→ Ссылка
Автор решения: Alexander G.

Решил задачу для XSLT 1.0 с помощью следующего XSLT-файла:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">

  <xsl:output omit-xml-declaration="yes"/>

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

  <xsl:template match="x:c[@t='s']" />

  <xsl:template match="x:v">
    <p>
      <xsl:value-of select="." />
    </p>
  </xsl:template>

</xsl:stylesheet>
→ Ссылка