将XML转换为Filemaker XML

时间:2013-06-10 09:20:17

标签: xml xslt xml-parsing filemaker

我发现学习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>

1 个答案:

答案 0 :(得分:0)

而不是

      <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路径正在寻找properties元素properties的子元素。