【问题标题】:Read filemaker export in php在 php 中读取 filemaker 导出
【发布时间】:2014-02-01 05:17:13
【问题描述】:

我在从 FileMaker Pro 读取导出的文件并在 PHP 中读取/加载它时遇到问题。

我正在使用 Codeigniter,但我可以使用纯/普通的 Php 5

我尝试在 csv 中导出,但在读取它时遇到了困难,而不是在 xml 中尝试,但导出的大小约为 500MB (...),并且难以通过节点循环。

现在我尝试使用 FileMaker 的 html 导出和 Simple HTML DOM 我尝试了这个:

public function parse($file_name){

        include 'xml/simple_html_dom.php';

        // Create DOM from URL or file
        $html = file_get_html(base_url("xml/$file_name.htm"));

        foreach($html->find('th') as $header => $hr){
            echo $hr;
            foreach($html->find('td') as $content => $td){ 
                echo ($td == "<BR>") ? '': $td;
            }
        }        


    }

这很好,但无法以我可以逐行加载到数据库中的方式读取所有内容... 有没有最好的解决方案?

【问题讨论】:

  • 您可以发布您要解析的 xml 的 sn-p 吗?像所有主节点的第一个实例一样?

标签: php import export filemaker


【解决方案1】:

如果您尝试从 FileMaker XML 记录导出中提取数据,您可以使用 SimpleXML 工具(如 SimpleXMLElement)访问节点内的数据:

$string = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="04-17-2014" NAME="FileMaker" VERSION="ProAdvanced 13.0v3"/>
    <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="XMLTest.fmp12" RECORDS="3" TIMEFORMAT="h:mm:ss a"/>
    <METADATA>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="id" TYPE="NUMBER"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="test" TYPE="TEXT"/>
        <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="name" TYPE="TEXT"/>
    </METADATA>
    <RESULTSET FOUND="3">
        <ROW MODID="3" RECORDID="1">
            <COL>
                <DATA>1</DATA>
            </COL>
            <COL>
                <DATA>test</DATA>
            </COL>
            <COL>
                <DATA>Chris</DATA>
            </COL>
        </ROW>
        <ROW MODID="3" RECORDID="2">
            <COL>
                <DATA>2</DATA>
            </COL>
            <COL>
                <DATA>jaslfk;jad</DATA>
            </COL>
            <COL>
                <DATA>Ruthie</DATA>
            </COL>
        </ROW>
        <ROW MODID="3" RECORDID="3">
            <COL>
                <DATA>3</DATA>
            </COL>
            <COL>
                <DATA>iiiii</DATA>
            </COL>
            <COL>
                <DATA>Zoe</DATA>
            </COL>
        </ROW>
    </RESULTSET>
</FMPXMLRESULT>
XML;

// This is required for FileMaker record exports since they're namespaced
$string = str_replace('xmlns=', 'ns=', $string);

$xml    = new SimpleXMLElement($string);
$result = $xml->xpath('//RESULTSET');

echo "<pre>";

foreach($result[0]->children() as $row){

    echo "<ul>";

        // This shows how you can pull the specific attributes from a give node.
        echo "<li>record: " . $row->attributes()->RECORDID->__toString() . "</li>" ;
        echo "<ul>";

        // This shows how you can drill down to a specific node and pull a node value.
            foreach($row->COL as $column){
                echo "<li>" . $column->DATA->__toString() . "</li>" ;
            }

        echo "</ul>";
    echo "</ul>";
}

几个特别说明:

  • $string = str_replace('xmlns=', 'ns=', $string); 行是必需的,因为 FileMaker 命名空间是 xml
  • 我正在使用 xpath 来获取值,但您也可以使用 SimpleXMLIterator 工具来遍历结构

【讨论】:

    【解决方案2】:

    我使用 XML 导出和此处描述的类取得了不错的成功:

    http://thomasoandrews.com/wordpress/2011/02/24/parsing-huge-xml-exports-from-filemaker-with-php/

    (注意 - 我不是这个的作者)。

    您对 XML 增加了很多开销是正确的 - 我认为您唯一能做的就是只导出您需要的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-16
      • 2020-09-27
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多