gpt4 book ai didi

php - 使用 php 将 XML 嵌套到 MySQL 表

转载 作者:行者123 更新时间:2023-11-29 07:57:34 25 4
gpt4 key购买 nike

我是 XML 和 php 的新手,这听起来像是一个非常基本的问题。我有这样的 XML 文件。

  <testsuites>
<testsuite name="test1" errors="0" skipped="0" tests="19" failures="0" time="2093">
<properties>
<property name="script" value="smoketest" />
<property name="script_start_time" value="14042" />
<property name="dut_type" value="SSR10" />
<property name="block" value="20PGIGE" />
<property name="dut_image" value="IPOS-15.1.27.100.98-Release" />
</properties>
<testcase classname="SSR/smoketest" name="TC200: Verify PPA3LP " time="4">
</testcase>

我需要输入 mysql 表中的所有值。创建包含所有字段的数据库。问题在于属性和测试用例内的嵌套结构。我也需要所有这些值(value)观。有人可以指导我一个教程,解释如何使用 php.ini 来做到这一点吗?谢谢。

最佳答案

由于 XML 包含分层数据(具有属性的元素和具有属性的子元素),但您的数据库表是平面结构(行和列),因此您需要转换数据。

XML 文档树中的数据:

  \- testsuite
| |- name="test1"
| \- properties
| |- property
| | \- name="script" value="smoketest"
... ...

测试套件表中的数据:

Testsuites

+-------+-----------+- ...
| name | script | ...
+-------+-----------+- ...
| test1 | smoketest | ...
+-------+-----------+- ...

尽管结构的组织方式不同,但两者都表示字段列表,因此即使 XML 是分层组织的,其中表示的数据也可以表示为列表。这是改造它的前提。

由于两者都是某种列表,因此您可以循环处理它。您可以通过迭代 XML 文档中的元素来解决转换问题,即如果一个这样的元素代表单行的所有数据,则可以迭代 测试套件

然后,您获取每个这样的 testsuite 元素的数据,并将其存储到像数组这样的平面结构中。然后,您可以使用该数组插入一行。

通过将 XPath 与上下文节点结合使用,可以使用 XML 最轻松地完成此映射。这里的上下文节点是您在每次迭代中获得的 testsuite 元素。

...
'name' => 'string(./@name)',
...
'script' => 'string(./properties/property[@name="script"]/@value)',
...

这样的映射允许您以灵活的方式轻松配置,以从每次迭代中获取所有需要的数据。早先在 How can I extract structured text from an HTML list in PHP? 中概述了这一原则。下面是一个更简化的示例,其中包含您的 XML block :

$buffer = <<<XML
<testsuites>
<testsuite name="test1" errors="0" skipped="0" tests="19" failures="0" time="2093">
<!-- ... all the data you've got ... -->
</testsuite>
</testsuites>
XML;

$mapping = [
'name' => 'string(./@name)',
'script' => 'string(./properties/property[@name="script"]/@value)',
];

$doc = new DOMDocument();
$doc->loadXML($buffer);
$xpath = new DOMXPath($doc);

$testSuites = $xpath->evaluate('/*/testsuite');

foreach ($testSuites as $testSuite) {
$row = [];
foreach ($mapping as $name => $expression) {
$row[$name] = $xpath->evaluate($expression, $testSuite);
}
print_r($row);
}

这会输出您问题中的示例数据:

Array
(
[name] => test1
[script] => smoketest
)

该映射显示了如何访问属性值以及基于特定元素的另一个属性值的属性值。所以这两个映射涵盖了您的所有情况。一般来说,这只是 xpath,如果您在网站上搜索特定的“如何在 xpath 中执行此或操作”,您还可以找到更复杂的内容,例如处理 XML namespace ,这在我的示例中未涉及。

我想您知道如何将数据插入数据库,就像现在使用数组(或者更好的是映射已经)一样,当您将树结构转变为平面结构时,这应该很容易。

关于php - 使用 php 将 XML 嵌套到 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com