2010-06-08 3 views
1

Я ищу для экспорта из Filemaker, используя имена столбцов (вместо позиций). В настоящее время я экспортирую следующую таблицу стилей XSL, которая экспортирует по положению с:Filemaker XSL Выберите столбец по имени

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fm="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fm" > 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 
<xsl:template match="/"> 
    <people> 
    <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW"> 
     <person> 
     <name> 
      <xsl:value-of select="fm:COL[01]/fm:DATA"/> 
     </name> 
     <location> 
      <xsl:value-of select="fm:COL[02]/fm:DATA"/> 
     </location> 
     </person> 
    </xsl:for-each> 
    </people> 
</xsl:template> 
</xsl:stylesheet> 

Любые идеи? Благодарю.

+0

Пожалуйста, предоставьте (минимальный) XML-документ, на котором вы применяете свое преобразование. Мало кто знает формат файла Filemaker. –

ответ

4

Если вы просто хотите, чтобы сделать код более удобным для чтения, то я хотел бы предложить что-то простое, как:

<!-- expected columns --> 
<xsl:variable name="NAME" value="1" /> 
<xsl:variable name="LOCATION" value="2" /> 
<!-- ... --> 
<people> 
    <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW"> 
    <person> 
     <name> 
     <xsl:value-of select="fm:COL[$NAME]/fm:DATA"/> 
     </name> 
     <location> 
     <xsl:value-of select="fm:COL[$LOCATION]/fm:DATA"/> 
     </location> 
    </person> 
    </xsl:for-each> 
</people> 

BTW, с <xsl:value-of /> вы можете опустить fm:DATA, то есть использование:

<xsl:value-of select="fm:COL[$LOCATION] /> 

Он вернет тот же результат.

Если вам нужно что-то более сложное, объясните, пожалуйста.

Update:

Чтобы ссылаться на столбцы по именам столбцов труднее, но возможно что-то вроде, что:

<!-- Define a key to get a field and all fields that precede it by the field name --> 
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" use="@NAME" /> 
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" 
    use="following-sibling::fm:FIELD/@NAME" /> 
<!-- Then *count* them it in the code like that --> 
<people> 
    <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW"> 
    <person> 
     <name> 
     <xsl:value-of select="fm:COL[count(key('N', 'name'))]" /> 
     </name> 
     <location> 
     <xsl:value-of select="fm:COL[count(key('N', 'location'))]" /> 
     </location> 
    </person> 
    </xsl:for-each> 
</people> 

Не совсем элегантно, но работает.

+0

Это не то, что я ищу. Я хочу иметь возможность выбирать по имени столбца, так что, если пользователь реорганизует столбцы, экспорт по-прежнему работает. –

+0

О, я вижу. Обновление сообщения другим примером. –

+0

Спасибо! Это то, что я искал. Ура! –

Смежные вопросы