0

我在 filemaker 中导入 XML 数据,我需要一些帮助来格式化数据。

我的 XML 文件:

<?xml version="1.0" standalone="yes"?>
<articoli>
  <articolo>
    <Codice>000001101</Codice>
    <prezzoPers>12.20</prezzoPers>
    <data>20130916</data>
  </articolo>
</articoli>

我的 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">


    <xsl:template match="/*">
        <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
            <ERRORCODE>0</ERRORCODE>
            <PRODUCT BUILD="" NAME="" VERSION=""/>
            <DATABASE DATEFORMAT="yyyymmdd" LAYOUT="" NAME="" RECORDS="{count(/*/*)}" TIMEFORMAT="h:mm:ss a"/>
            <METADATA>
                 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Codice" TYPE="NUMBER"/>
                 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="prezzoPers" TYPE="NUMBER"/>
                 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="data" TYPE="DATE"/>

            </METADATA>
            <RESULTSET>
                <xsl:attribute name="FOUND"><xsl:value-of select="count(child::*)"/></xsl:attribute>
                <xsl:for-each select="child::*">
                    <ROW>
                        <xsl:attribute name="MODID">0</xsl:attribute>
                        <xsl:attribute name="RECORDID">0</xsl:attribute>
                        <xsl:for-each select="child::*">
                            <COL>
                                <DATA>
                                    <xsl:value-of select="."/>
                                </DATA>
                            </COL>
                        </xsl:for-each>
                    </ROW>
                </xsl:for-each>
            </RESULTSET>
        </FMPXMLRESULT>
    </xsl:template>
</xsl:stylesheet>

导入工作正常,但我想将字段“数据”从 yyyymmdd 格式化为 dd/mm/yyyy,并在字段“prezzoPers”中使用“,”而不是“。” 我是 XSLT 的新手,所以如果有人能给我一点帮助,我将不胜感激!谢谢指教。沃尔特

4

2 回答 2

1

搜索函数 substring-before 和 substring-after 或 substring 以获取现有字符串的一部分以重建它。搜索用于将字符串中的字符更改为另一个字符的函数 transform。

这应该让你开始做你自己的尝试。

于 2013-09-16T16:01:21.383 回答
1

您可以使用下一个 XSLT 来做到这一点:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

    <xsl:template match="/articoli">
        <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
            <ERRORCODE>0</ERRORCODE>
            <PRODUCT BUILD="" NAME="" VERSION=""/>
            <DATABASE DATEFORMAT="yyyymmdd" LAYOUT="" NAME="" RECORDS="{count(articolo)}" TIMEFORMAT="h:mm:ss a"/>
            <METADATA>
                <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Codice" TYPE="NUMBER"/>
                <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="prezzoPers" TYPE="NUMBER"/>
                <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="data" TYPE="DATE"/>
            </METADATA>
            <RESULTSET FOUND="{count(articolo)}">
                <xsl:for-each select="articolo">
                    <ROW MODID="0" RECORDID="0">
                        <xsl:for-each select="child::*">
                            <COL>
                                <DATA>
                                    <xsl:choose>
                                        <xsl:when test="local-name() = 'prezzoPers'">
                                            <!-- Will be performed on element 'prezzoPers' -->
                                            <xsl:value-of select="translate(., '.', ',')" />
                                        </xsl:when>
                                        <xsl:when test="local-name() = 'data'">
                                            <!-- Will be performed on element 'data' -->
                                            <xsl:value-of select="substring(., '7', '2')" /><xsl:value-of select="substring(., '5', '2')" /><xsl:value-of select="substring(., '1', '4')" />
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <!-- Will be performed on element 'Codice' -->
                                                    <xsl:value-of select="."/>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </DATA>
                            </COL>
                        </xsl:for-each>
                    </ROW>
                </xsl:for-each>
            </RESULTSET>
        </FMPXMLRESULT>
    </xsl:template>
</xsl:stylesheet>
于 2013-09-16T16:05:28.737 回答