2016-09-20 5 views
0

Я использую фильтр экспорта XSLT, чтобы извлечь часть моего файла OpenOffice Calc в файл XML. Я основывал свой фильтр на втором ответе в this SO question, и он работал нормально, пока я не добавил еще один лист в файл Calc.Укажите рабочий лист в фильтрах экспорта XSLT для OpenOffice Calc

Теперь фильтр применяется к каждому рабочему листу, а поскольку они совсем другие, то полученный XML является мусором.

Могу ли я указать, какой рабочий лист применять фильтр при экспорте? Например, используя имя или позицию заказа листа?

Edit:

первенствовать выглядит like this.

Как вы можете видеть, есть также второй рабочий лист, к которому я хочу применить другой XSLT-фильтр.

В настоящее время фильтр для таблицы на скриншоте выглядит следующим образом (это хорошо работает, когда есть только одна таблица):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" exclude-result-prefixes="office table text"> 

<xsl:template match="/"> 
    <command name="CreateTitle"> 
    <xsl:apply-templates select="/*/office:body" /> 
    </command> 
</xsl:template> 

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

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

<xsl:template match="office:spreadsheet/table:table"> 
    <title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title> 
    <titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc> 
    <institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute> 
    <contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType> 
</xsl:template> 
</xsl:stylesheet> 

Это формат ввода http://pastebin.com/tLyFKU4e (своего рода длинный)

+0

Попробуйте изменить ' 'to' 'as попытка обработки на основе позиции. Я не знаком с XML-форматом OpenOffice, поэтому попробуйте сами. –

+0

Спасибо за предложение, но это, к сожалению, не сработало. Я также пытался использовать Google для такого синтаксиса, но ничего не мог найти. –

+0

Выполняет ли изменение '' to '' улучшить ситуацию? Как я уже сказал, я не знаком с точным XML-форматом, поэтому, если вы не отредактируете вопрос и не покажете нам образец ввода, который он угадывает. –

ответ

1

It появляется spreadsheet элементы содержат различные table детей, так что если вы только хотите обработать первую таблицу (предполагая, что она представляет собой первый лист), затем используйте

<xsl:template match="office:body"> 
    <xsl:apply-templates select="office:spreadsheet/table:table[1]"/> 
</xsl:template> 

вместе с другими шаблонами, настраивающих корневой элемент и, конечно, один извлекающий данные из таблицы

<xsl:template match="/"> 
    <command name="CreateTitle"> 
    <xsl:apply-templates select="/*/office:body" /> 
    </command> 
</xsl:template> 

<xsl:template match="office:spreadsheet/table:table"> 
    <title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title> 
    <titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc> 
    <institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute> 
    <contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType> 
</xsl:template> 
+0

Работает как очарование - большое спасибо! –