解析数据(PHP、MySQL)

解析数据(PHP、MySQL),php,mysql,parsing,Php,Mysql,Parsing,我有一个包含以下格式数据的文件: <user> <fname>Anthony</fname> <lname>Smith</lname> <accid>3874918</accid> </user> <user> ... </user> 安东尼 史密斯 3874918 ... 我试图解析这些数据,并用以下字段将其存储到MySQL数据库:f

我有一个包含以下格式数据的文件:

<user>
    <fname>Anthony</fname>
    <lname>Smith</lname>
    <accid>3874918</accid>
</user>

<user>
     ...
</user>

安东尼
史密斯
3874918
...
我试图解析这些数据,并用以下字段将其存储到MySQL数据库:fname、lname、accid


现在的问题是如何确定
,以便分析其中的数据?谢谢。

如果是xml文件,我建议使用xml解析器(?)而不是使用正则表达式和/或字符串函数。

如果是xml文件,我建议使用xml解析器(?)而不是使用正则表达式和/或字符串函数。

您应该使用dom解析器来解决这个问题(或xml解析器,具体取决于您的数据)。它看起来像这样(警告:未测试的代码):

$dom=newdomdocument();
$dom->loadXML($xmlString);
$list=$dom->getElementsByTagName('user');
对于($i=0;$i<$list->length;$i++){
$userNode=$list->item($i);
$node=$userNode->firstChild();
while($node!==NULL){
交换机($node->$nodeName){
案例“fname”:
// ...
}
$node=$node->nextSibling();
}
}

您应该使用dom解析器(或xml解析器,取决于您的数据)对此进行解析。它看起来类似于以下内容(警告:未测试的代码):

$dom=newdomdocument();
$dom->loadXML($xmlString);
$list=$dom->getElementsByTagName('user');
对于($i=0;$i<$list->length;$i++){
$userNode=$list->item($i);
$node=$userNode->firstChild();
while($node!==NULL){
交换机($node->$nodeName){
案例“fname”:
// ...
}
$node=$node->nextSibling();
}
}
如果它是有效的XML,请使用。首先,您需要确保只有一个根元素,例如

;
foreach($xml作为$user){
//使用$user->fname,$user->lname,$user->accid进行查询
}
如果它是有效的XML,请使用。首先,您需要确保只有一个根元素,例如

;
foreach($xml作为$user){
//使用$user->fname,$user->lname,$user->accid进行查询
}

假设您使用的是php5(您应该这样做),您可以创建一个simpleXML对象,并使用它和PDO来完成,只需很少的代码。使用mysql_uu函数和手工解析XML将需要更多的代码

以下是一个例子:

$names = simplexml_load_file('names.xml');

foreach ($names->user as $user) { 

$pdo->exec("INSERT INTO names (fname, lname, accid)" . " VALUES ('" . $user->fname . " ', '" . $user->lname . "','" . $user->accid . "')")
or die("failed insert");

}

这不是经过测试的代码,但它让您对它的工作原理有了一个很好的了解。对于生产应用程序,我想在其中添加一些错误检查和验证,但这应该可以让您开始使用。

假设您使用的是php5(应该是)您可以创建一个simpleXML对象,并使用它和PDO来完成它,只需很少的代码。使用mysql_uu函数和手工解析XML将需要更多的代码

以下是一个例子:

$names = simplexml_load_file('names.xml');

foreach ($names->user as $user) { 

$pdo->exec("INSERT INTO names (fname, lname, accid)" . " VALUES ('" . $user->fname . " ', '" . $user->lname . "','" . $user->accid . "')")
or die("failed insert");

}

这不是经过测试的代码,但它让您对它的工作原理有了一个很好的了解。对于生产应用程序,我想在其中添加一些错误检查和验证,但这应该可以让您开始使用。

如果您使用的是PHP5.x,SimpleXML将帮助您

<?php
$sample = <<<END                                                                                                             
<foo>
 <user>
    <fname>Anthony</fname>
    <lname>Smith</lname>
    <accid>3874918</accid>
  </user>
  <user>
    <fname>foo</fname>
    <lname>bar</lname>
    <accid>123</accid>
  </user>
</foo>
END;

$xml = simplexml_load_string($sample);
var_dump($xml);

如果您使用的是PHP5.x,SimpleXML将帮助您

<?php
$sample = <<<END                                                                                                             
<foo>
 <user>
    <fname>Anthony</fname>
    <lname>Smith</lname>
    <accid>3874918</accid>
  </user>
  <user>
    <fname>foo</fname>
    <lname>bar</lname>
    <accid>123</accid>
  </user>
</foo>
END;

$xml = simplexml_load_string($sample);
var_dump($xml);

如果它不包含单个根节点,则它是无效的XML。是的,这是真的。我不确定他是否只发布了摘录或文档结构的真实表示形式。如果它不包含单个根节点,则它是无效的XML。是的,这是真的。我不确定他是否只发布了摘录或文档结构的真实表示形式e文件结构。