解析数据(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文件结构。