创建XSL样式表以管理FileMaker Pro XML输出

创建XSL样式表以管理FileMaker Pro XML输出,xml,xslt,filemaker,adobe-indesign,Xml,Xslt,Filemaker,Adobe Indesign,我使用XML将数据提供给InDesign模板,并且正在从较旧、更简单的设置(Excel电子表格中的映射单元格)切换到FileMaker Pro。FileMaker Pro以与InDesign文档中已建立的XML结构稍有不同的格式导出XML 从FileMaker Pro导出XML时,我可以选择使用XSL样式表,但我不知道如何创建一个(我发现的教程似乎很模糊,或者假设我已经知道一些我不知道的东西) FileMaker Pro导出如下所示: <?xml version="1.0" encodin

我使用XML将数据提供给InDesign模板,并且正在从较旧、更简单的设置(Excel电子表格中的映射单元格)切换到FileMaker Pro。FileMaker Pro以与InDesign文档中已建立的XML结构稍有不同的格式导出XML

从FileMaker Pro导出XML时,我可以选择使用XSL样式表,但我不知道如何创建一个(我发现的教程似乎很模糊,或者假设我已经知道一些我不知道的东西)

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>
0
项目fmp12
我需要为每个记录编写一个样式表,以便导出的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>


如果您有任何建议,我们将不胜感激。

您没有指定结果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>

0
项目fmp12
最佳项目
纽约
3.
克莱斯勒
洛杉矶
2012-10-12
大的
有趣的项目
一个相当好的项目
芝加哥
4.
30号假街。
夏洛特
2013-02-03
中等
严肃的计划
产生以下结果:

<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>

最佳项目
纽约
克莱斯勒
洛杉矶
2012-10-12
大的
有趣的项目
一个相当好的项目
芝加哥
30号假街。
夏洛特
2013-02-03
中等
严肃的计划

谢谢你的帮助,JLRishe。我尝试了您的代码,但出现了以下错误:SAXParseException:预期的空白(出现在第29行第87列的实体“/path/filename.xsl”中)看起来像是一个全宽空间。现在应该修好了。你能再试一次吗?效果很好。非常感谢你的帮助。祝你有美好的一天。