Исключить теги из 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>
Необходимо вывести все значения:
- заключенные в теге
<v>
, - но при этом убрать все значения, имеющие в теге
<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>