【问题标题】:Transform XML to Filemaker XML将 XML 转换为 Filemaker XML
【发布时间】:2013-06-10 09:20:16
【问题描述】:

我发现学习 XSLT 确实非常困难 - 似乎缺乏尚未复杂得令人眼花缭乱的初学者指南。我希望有人可以帮助我,拜托。

我需要将下面一个简单的 XML 文件转换为 Filemaker 12 可以读取的 XML:

<properties>
    <property>
        <ref>12345</ref>
        <location>somewhere
        <price>12345</price>
        <photos>
            <photo>www.test.com/1.jpg</photo>
            <photo>www.test.com/2.jpg</photo>
            <photo>www.test.com/3.jpg</photo>
        </photos>
        <details>
            <summary>nice house</summary>
            <description>a very very nice house</description>
        </details>
    </property>
</properties>

我似乎不知道如何循环浏览照片(可能是 1 或 30 张)以及获取摘要和描述。

谁能帮忙?

非常感谢!

这是我目前所拥有的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="" NAME="FileMaker" VERSION="ProAdvanced 12.0v4"/>
    <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
    <METADATA>
        <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="ref" TYPE="TEXT" />
        <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="location" TYPE="TEXT" />
        <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="price" TYPE="NUMBER" />
        <FIELD EMPTYOK="YES" MAXREPEAT="30" NAME="photo" TYPE="TEXT" />
        <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="summary" TYPE="TEXT" />
        <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="description" TYPE="TEXT" />
    </METADATA>
    <RESULTSET FOUND="">
    <xsl:for-each select="properties/property">
        <ROW RECORDID="" MODID="">
            <COL><DATA><xsl:value-of select="ref"/></DATA></COL>
            <COL><DATA><xsl:value-of select="location"/></DATA></COL>
            <COL><DATA><xsl:value-of select="price"/></DATA></COL>
            <xsl:for-each select="properties/property/photos">
            <COL>
                <DATA><xsl:value-of select="photo"/></DATA>
            </COL>
            </xsl:for-each>
            <COL><DATA><xsl:value-of select="summary"/></DATA></COL>
            <COL><DATA><xsl:value-of select="description"/></DATA></COL>
        </ROW>
    </xsl:for-each>     
    </RESULTSET>
</FMPXMLRESULT>
</xsl:template>
</xsl:stylesheet>

【问题讨论】:

    标签: xml xslt xml-parsing filemaker


    【解决方案1】:

    代替

          <xsl:for-each select="properties/property/photos">
            <COL>
                <DATA><xsl:value-of select="photo"/></DATA>
            </COL>
    

    你可能想要

          <xsl:for-each select="photos/photo">
            <COL>
                <DATA><xsl:value-of select="."/></DATA>
            </COL>
    

    此时当前节点是property 元素,这就是为什么

            <COL><DATA><xsl:value-of select="price"/></DATA></COL>
    

    上述行有效,因此您的 properties/property/photos 路径正在寻找不存在的 propertiesproperties 子元素。

    【讨论】:

    • 您好 - 非常感谢。这已经奏效,但它只显示输出到 Filemaker 的其中一张照片。我想要的是拥有所有照片,如果可能的话最好编号:照片1,照片2,照片3等 - 任何想法。非常感谢您的帮助。
    • 如果您的输入与&lt;xsl:for-each select="photos/photo"&gt; 描述的一样,将为每张照片创建一个&lt;COL 条目。你从来没有说过你想要输出 XMl 是什么。也许您希望每张照片都有一个 DATA 的 COL 元素?还是????
    • 嗨,大卫 - 我实际上已经解决了这个问题,再次感谢您的帮助。在定义字段的 XSL 的 Filemaker 部分中,我为 photo1、photo2、photo3 等添加了字段,现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2016-08-24
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多