我想在mysql数据库中保存xml文件,如下所示:
$_docId= $this->getRequest()->getParam('docId', 0);
$_slmData = '<SLM_form_v2 id="slmform"><group_1_1><section1_1/><name1_1>sdfds</name1_1>
enter code here<localname1_2/><selectcountry_1_3>Algeria</selectcountry_1_3></group_1_1>
enter code here<group_1_2><main_doc/><name_doc1>gdgf gfh f</name_doc1><sex_doc1>Male
</sex_doc1><name_institution_1>fsdgdfg</name_institution_1><address_institution_1>gdgfdgfd
</address_institution_1>....';
$_docMapper = new Model_Mapper_XMLDoc();
$_docModel = new Model_XMLDoc();
$_docModel ->doc_data = Zend_Json::encode($_docData);
if ($_docId != 0) {
$_docModel->id = $_docId;
$_docMapper->update($_docModel->toArray(), 'id = ' . $_docId);
$_action = 'update';
} else {
$_docMapper->insert($_docModel->toArray());
$_lastId = $_docMapper->getAdapter()->lastInsertId(); //gets the id of the last inserted record
$_action = 'add';
}
$this->_helper->json->sendJson(array(
'message' => 'success',
'id' => $_lastId,
'action' => $_action
));
它存储在db:
中INSERT INTO crpcoreix.tbl_xml_doc (slm_data, web_gis_fk) VALUES ('"<SLM_form_v2 id=\\"slmform\\"><group_1_1><section1_1\\/><name1_1>sdfds<\\/name1_1><localname1_2\\/><selectcountry_1_3>Algeria<\\/selectcountry_1_3><\\/group_1_1><group_1_2><main_doc\\/><name_doc1>gdgf gfh f<\\/name_doc1><sex_doc1>Male<\\/sex_doc1><name_institution_1>fsdgdfg<\\/name_institution_1><address_institution_1>gdgfdgfd gdgf<\\/address_institution_1>...', null);
当我尝试从数据库中读取数据并显示编码的xml标签时,输出会错过第一部分("<SLM_form_v2 id=\\"slmform\\"><group_1_1><section1_1\\/><name1_1>...)
第一部分
Array
(
[id] => 1
[xml_data] => "sdfds<\/name1_1>Algeria<\/selectcountry_1_3>...'
[web_gis_fk] =>
)
请建议如何修复,以及是否有更好的方法将xml文档存储在数据库中。
感谢名单,
答案 0 :(得分:1)
首先,你需要仔细检查你给定的xml语法,不管它是否正确。
Zend_Json包含一个名为
Zend_Json::fromXml().
的静态函数 您最好设法使用它而不是Zend_Json::encode
你编码XML
此函数将从给定的XML输入生成JSON。
此函数将任意XML字符串作为输入参数。它还使用可选的布尔输入参数来指示转换逻辑在转换过程中忽略或不忽略XML属性。
如果未给出此可选输入参数,则默认行为是忽略XML属性。此函数调用如下所示:
$jsonContents = Zend_Json::fromXml($xmlStringContents, true);
尝试一下,但请再次检查XML语法