2013-01-22 45 views
2

我使用XML將數據提供給InDesign模板,並且正在從舊的,更簡單的設置(Excel電子表格中的映射單元格)切換到FileMaker Pro。 FileMaker Pro以與InDesign文檔中已建立的XML結構稍微不同的格式導出XML。創建一個XSL樣式表來管理FileMaker Pro XML輸出

當從FileMaker Pro中導出XML時,我可以選擇使用XSL樣式表,但我不知道如何創建一個(我發現的教程看起來很模糊,或者假設我已經知道我不喜歡的東西, T)。

的FileMaker Pro出口是這樣的:

<?xml version="1.0" encoding="UTF-8" ?><!-- This grammar has been deprecated - use FMPXMLRESULT instead --><FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult"><ERRORCODE>0</ERRORCODE> 
<DATABASE>Projects.fmp12</DATABASE> 
<LAYOUT></LAYOUT> 
<ROW MODID="1" RECORDID="2"> 
<Project_name></Project_name> 
<City_1></City_1> 
<Size></Size> 
<Building></Building> 
<City_2></City_2> 
<Completion></Completion> 
<Scope_of_work></Scope_of_work> 
<Description></Description> 
</ROW> 

我需要這樣導出XML這種結構相匹配編寫樣式表,爲每個記錄:

<project> 
    <project_title> 
     <name></name> 
     <city_1></city_1> 
    </project_title> 
    <project_information> 
     <size></size> 
     <building></building> 
     <city_2></city_2> 
     <completion></completion> 
     <scope_of_work></scope_of_work> 
    </project_information> 
    <description></description> 
</project> 

任何意見將不勝感激。

回答

5

沒有指定結果XML的外部節點將是什麼樣子,或者如果它使用一個命名空間,但是這個怎麼樣:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fm="http://www.filemaker.com/fmpdsoresult" exclude-result-prefixes="fm"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:variable name="rename"> 
    <item from="Project_name" to="name" /> 
    <item from="City_1" to="city_1" /> 
    <item from="Size" to="size" /> 
    <item from="Building" to="building" /> 
    <item from="City_2" to="city_2" /> 
    <item from="Completion" to="completion" /> 
    <item from="Scope_of_work" to="scope_of_work" /> 
    <item from="Description" to="description" /> 
    </xsl:variable> 

    <xsl:template match="/*"> 
    <root> 
     <xsl:apply-templates select="fm:ROW"/> 
    </root> 
    </xsl:template> 

    <xsl:template match="fm:ROW"> 
    <project> 
     <project_title> 
     <xsl:apply-templates select="fm:Project_name | fm:City_1" mode="rename" /> 
     </project_title> 
     <project_information> 
     <xsl:apply-templates 
     select="fm:size | fm:Building | fm:City_2 | fm:Completion | fm:Scope_of_work" 
     mode="rename" /> 
     </project_information> 
     <xsl:apply-templates select="fm:Description" mode="rename" /> 
    </project> 
    </xsl:template> 

    <xsl:template match="*" mode="rename"> 
    <xsl:element name="{document('')//xsl:variable[@name = 'rename']/item[@from = local-name(current())]/@to}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

當此輸入運行:

<FMPDSORESULT xmlns="http://www.filemaker.com/fmpdsoresult"> 
    <ERRORCODE>0</ERRORCODE> 
    <DATABASE>Projects.fmp12</DATABASE> 
    <LAYOUT></LAYOUT> 
    <ROW MODID="1" RECORDID="2"> 
    <Project_name>The best project</Project_name> 
    <City_1>New York</City_1> 
    <Size>3</Size> 
    <Building>Chrysler</Building> 
    <City_2>Los Angeles</City_2> 
    <Completion>2012-10-12</Completion> 
    <Scope_of_work>Big</Scope_of_work> 
    <Description>A fun project</Description> 
    </ROW> 
    <ROW MODID="1" RECORDID="2"> 
    <Project_name>A pretty good project</Project_name> 
    <City_1>Chicago</City_1> 
    <Size>4</Size> 
    <Building>30 Fake St.</Building> 
    <City_2>Charlotte</City_2> 
    <Completion>2013-02-03</Completion> 
    <Scope_of_work>Medium</Scope_of_work> 
    <Description>A serious project</Description> 
    </ROW> 
</FMPDSORESULT> 

產品編號:

<root> 
    <project> 
    <project_title> 
     <name>The best project</name> 
     <city_1>New York</city_1> 
    </project_title> 
    <project_information> 
     <building>Chrysler</building> 
     <city_2>Los Angeles</city_2> 
     <completion>2012-10-12</completion> 
     <scope_of_work>Big</scope_of_work> 
    </project_information> 
    <description>A fun project</description> 
    </project> 
    <project> 
    <project_title> 
     <name>A pretty good project</name> 
     <city_1>Chicago</city_1> 
    </project_title> 
    <project_information> 
     <building>30 Fake St.</building> 
     <city_2>Charlotte</city_2> 
     <completion>2013-02-03</completion> 
     <scope_of_work>Medium</scope_of_work> 
    </project_information> 
    <description>A serious project</description> 
    </project> 
</root> 
+0

感謝您的幫助,JLRishe。我嘗試了你的代碼,並得到這個錯誤:SAXParseException:期望的空白(發生在實體'/path/filename.xsl',在第29行,第87列。) – user2001759

+0

看起來像是一個全寬的空間。現在應該修復。你能再試一次嗎? – JLRishe

+0

工作得很好。非常感激你的幫助。祝你有美好的一天。 – user2001759