【问题标题】:Mapping XML field's in php [closed]在php中映射XML字段[关闭]
【发布时间】:2012-12-08 17:50:30
【问题描述】:

我有一个非常大的 xml。它有像

这样的字段
<SegrigatedQualification>
    <EducationSplit>
      <University><![CDATA[G. H. Raisoni College of Engineering]]></University>
      <Degree><![CDATA[Engineering]]></Degree>
      <Year><![CDATA[2011]]></Year>
    </EducationSplit>
    <EducationSplit>
      <University><![CDATA[G. H. Raisoni College of Engineering]]></University>
      <Degree><![CDATA[Engineering]]></Degree>
      <Year><![CDATA[2010]]></Year>
    </EducationSplit>
    <EducationSplit>
      <University><![CDATA[G. H. Raisoni College of Engineering]]></University>
      <Degree><![CDATA[Engineering]]></Degree>
      <Year><![CDATA[2009]]></Year>
    </EducationSplit>
    <EducationSplit>
      <University><![CDATA[Diploma  I.T]]></University>
      <Degree><![CDATA[Diploma  I.T]]></Degree>
      <Year><![CDATA[2008]]></Year>
    </EducationSplit>
    <EducationSplit>
      <University><![CDATA[Nasik Board]]></University>
      <Degree><![CDATA[S.S.C]]></Degree>
      <Year><![CDATA[2003]]></Year>
    </EducationSplit>
  </SegrigatedQualification>

我想映射字段并制作表格,然后将所有xml的信息存储到表格中。问题是如果我创建一个列 SagrigratedQualificaton 我如何存储教育拆分或大学、学位、年份?因为如果我创建单独的列,大学、学位等的信息将占用两行或更多行,这样表格就变得多余了。将 xml 映射到表中的最佳方法是什么?

【问题讨论】:

  • 您应该阅读database normalization,然后根据您所学的知识尝试创建一个表结构。
  • 我明白你的意思,但很多字段都是动态的,所以稍后如果该字段不在表中,我会添加它。

标签: php mysql xml xml-parsing schema


【解决方案1】:
<?php
require("MagicParser.php");

function myRecordHandler($record){


// This is where you write your code to process each record, such as loading a database

// The following code will print out each field in your sample data:
print $record["EDUCATIONSPLIT"];
print $record["UNIVERSITY"];
print $record["DEGREE"];
print $record["YEAR"];
}

$data = ""; // string variable contianing the data to parse

MagicParser_parse("string://".$data,"myRecordHandler","xml|SEGRIGATEDQUALIFICATION/EDUCATIONSPLIT/");
?>

注意:如果您想从实际文件中加载它,那么您只需删除 $data 引用并使 MagicParser_parse 如下所示:

MagicParser_parse("your-xml-file.xml".$data,"myRecordHandler","xml|SEGRIGATEDQUALIFICATION/EDUCATIONSPLIT/");

【讨论】:

  • 感谢 Alex 没弄好 :(
【解决方案2】:

您可以使用 MagicParser 之类的工具来提取数据,然后轻松地将其映射到您自己的表和字段中。

【讨论】:

  • 谢谢让我结帐。
  • 你可以在这里查看它是如何解析你的 xml 的:magicparser.com/demo?fileID=50D402D0B7893&record=2
  • 谢谢我试过这个工具。工具很好,但它没有解析我的所有字段。这个工具我可以用于小型 xml。
  • 它解析了你举的例子就好了。我可以看到所有的记录都被分解了。确保单击 Prev Record 2 Next 以查看您的所有记录!
  • 我给出的 xml 是一小块原始 xml,解析得很好。但是原始 xml 的很多字段都没有被解析,甚至很多字段都被排除了,其中包含“html”数据。
【解决方案3】:

关系数据库...每个 xml 结构应该是不同表中的不同记录。 或者只是保持简单并将其存储在某个 TEXT 或 BLOB 字段中。

【讨论】:

  • 嗯,这将是我的最后选择。
  • 然后即兴发挥...创建最适合您的表结构并在那里转储信息。您可以将父/子节点名称合并为更具创意的字段名称educationsplit_university等...然后编写递归函数将您的xml转换为一维键=>值数组并保存
  • 嗯,我可以试试这个,但第一步是用 xml 中的字段创建表,然后用键值映射所有这一切都将花费太多时间,我必须找到一个简单的解决方案。
  • 如果您编写 1 个递归函数来从 xml 生成一维数组,那么只需使用 array_keys 转储键并创建您的表。
  • 是的,完全正确。这就是我正在寻找的是否有任何现成的东西,否则我必须根据需要编写自己的 xml 解析器来处理表生成和字段制作并将数据存储到表中。谢谢。 :)
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2014-04-27
相关资源
最近更新 更多