循环遍历XML文件并显示在表中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环遍历XML文件并显示在表中相关的知识,希望对你有一定的参考价值。
我试图得到它,以便对于概念类型列中的每个概念类型,它根据概念类型显示不同的xml代码。
到目前为止我有这个代码。
<?php
error_reporting(1);
$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = true;
$dom->preserveWhiteSpace = false;
#include_once upload.php';
$name = $_FILES['file']['name'];
$dom->load($name);
$cogxml = simplexml_load_file($name);
$extension = strtolower(substr($name, strpos($name, '.') + 1));
#$size = $_FILES['file']['size'];
# $type = $_FILES['file']['type'];
$tmp_name = $_FILES['file']['tmp_name'];
if(isset ($name)){
if(!empty($name)) {
if(($extension=='cogxml' || $extension=='cgx')){
$location = '';
if (move_uploaded_file($tmp_name, $location.$name)){
echo 'uploaded';
}else{
echo 'There was an error';
}
}else{
echo 'File must be cogxml or cgx.';
}
}
}
?>
<?php
?>
<html>
<head>
<title>Parsing CharGer and CoGui</title>
<link rel="stylesheet" type="text/css" href="css.css" />
</head>
<body>
<table border=1>
<tr><th>Concept Name</th><th>Relation Type</th><th>CoGui XML</th><th>CharGer XML</th></tr>
<?php foreach ($cogxml->support->conceptTypes->ctype as $data) {
#foreach ($name->support->relationTypes->rtype as $relationType){
?>
<tr><td><?php echo $data['label']; ?></td><td></td>
<?php $newdom = new DOMDocument('1.0', 'utf-8');
$newdom->formatOutput = true;
$newdom->preserveWhiteSpace = false;
$xpath = new DOMXPath($dom);
foreach ($dom->getElementsByTagName("ctype") as $ctype) {
$newdom->loadXML("<cogxml><support><conceptTypes /><relationTypes /></support></cogxml>");
$newnode = $newdom->importNode($ctype, true);
$newdom->getElementsByTagName("conceptTypes")->item(0)->appendChild($newnode);
$id = $ctype->getAttribute('id');
foreach ($xpath->query("//cogxml/support/conceptTypes/order[@id1='$id']") as $order) {
$newnode = $newdom->importNode($order, true);
$newdom->getElementsByTagName("conceptTypes")->item(0)->appendChild($newnode);
}
foreach ($xpath->query("//cogxml/support/relationTypes/rtype[contains(@idSignature, '$id')]") as $rtype) {
$newnode = $newdom->importNode($rtype, true);
$newdom->getElementsByTagName("relationTypes")->item(0)->appendChild($newnode);
} }
?><td><xmp><?php echo $newdom->saveXML();?></xmp></td><td></td></tr><?php }?></table>
<form action="test4.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
$ name是您在表单中上传的文件。以下代码是我的xml代码的示例。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cogxml>
<namespace name="http://www.lirmm.fr/cogui#" prefix=""/>
<support name="vocabulary">
<conceptTypes>
<ctype id="http://www.lirmm.fr/cogui#ct_043ea910-5f86-4150-b0f1-1418acf4db39" label="Junior Employee" x="250" y="10">
<translation descr="" label="Junior Employee" lang="en"/>
</ctype>
<ctype id="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" label="Employee" x="130" y="60">
<translation descr="" label="Employee" lang="en"/>
</ctype>
<ctype id="http://www.lirmm.fr/cogui#ct_feeca670-2f1c-433e-9271-4cffeda1e929" label="Director" x="250" y="110">
<translation descr="" label="Director" lang="en"/>
</ctype>
<ctype id="http://www.lirmm.fr/cogui#ct_710bed80-a33e-4a13-b916-15fbb3357e8d" label="Manager" x="250" y="60">
<translation descr="" label="Manager" lang="en"/>
</ctype>
<ctype id="http://www.lirmm.fr/cogui#ct_cd84c648-ef22-4854-8e8c-a6654c0386be" label="Senior Employee" x="255" y="190">
<translation descr="" label="Senior Employee" lang="en"/>
</ctype>
<ctype id="http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288" label="Top" x="10" y="60">
<translation descr="" label="Top" lang="en"/>
</ctype>
<order id1="http://www.lirmm.fr/cogui#ct_cd84c648-ef22-4854-8e8c-a6654c0386be" id2="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00"/>
<order id1="http://www.lirmm.fr/cogui#ct_feeca670-2f1c-433e-9271-4cffeda1e929" id2="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00"/>
<order id1="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" id2="http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288"/>
<order id1="http://www.lirmm.fr/cogui#ct_043ea910-5f86-4150-b0f1-1418acf4db39" id2="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00"/>
<order id1="http://www.lirmm.fr/cogui#ct_710bed80-a33e-4a13-b916-15fbb3357e8d" id2="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00"/>
</conceptTypes>
<relationTypes>
<rtype id="http://www.lirmm.fr/cogui#_rt_c42a5ce6-2f20-491d-8c91-501ae178a36c" idSignature="http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288 http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288" label="Link" x="10.0" y="10.0">
<translation descr="" label="Link" lang="en"/>
</rtype>
<rtype id="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" idSignature="http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288 http://www.lirmm.fr/cogui#_ct_a12bacc5-bc88-429e-a7b1-45e143591288" label="senior" x="70.0" y="10.0">
<translation descr="" label="senior" lang="en"/>
</rtype>
<order id1="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" id2="http://www.lirmm.fr/cogui#_rt_c42a5ce6-2f20-491d-8c91-501ae178a36c"/>
</relationTypes>
<nestingTypes>
<ntype id="http://www.lirmm.fr/cogui#_nt_4d626655-02b5-496e-b19c-f4cdb72ee70a" label="Nesting">
<translation descr="" label="Nesting" lang="en"/>
</ntype>
</nestingTypes>
<conformity>
<marker id="http://www.lirmm.fr/cogui#i_435d513c-1b39-43b1-9b6d-310fa0ee46d3" idType="http://www.lirmm.fr/cogui#ct_710bed80-a33e-4a13-b916-15fbb3357e8d" label="Lucy"/>
<marker id="http://www.lirmm.fr/cogui#i_80311575-7d72-4af7-bdbe-a19c4bbcf248" idType="http://www.lirmm.fr/cogui#ct_cd84c648-ef22-4854-8e8c-a6654c0386be" label="Simon"/>
<marker id="http://www.lirmm.fr/cogui#i_d1a8babc-3d35-4580-b4d5-d3cd4c323c98" idType="http://www.lirmm.fr/cogui#ct_043ea910-5f86-4150-b0f1-1418acf4db39" label="Robyn"/>
<marker id="http://www.lirmm.fr/cogui#i_efbef15b-d6e2-4c0a-8155-ecaae75cc673" idType="http://www.lirmm.fr/cogui#ct_feeca670-2f1c-433e-9271-4cffeda1e929" label="Richard"/>
</conformity>
<modules/>
</support>
<localeTypes name="undefined_vocabulary">
<conceptTypes/>
<relationTypes/>
<nestingTypes/>
<conformity/>
<modules/>
</localeTypes>
<graph id="_g1" label="seniorities" nature="fact" set="default_set">
<concept id="c_f55e1936-7842-4518-b460-bb34a9000871" idMarker="http://www.lirmm.fr/cogui#i_d1a8babc-3d35-4580-b4d5-d3cd4c323c98" idType="http://www.lirmm.fr/cogui#ct_043ea910-5f86-4150-b0f1-1418acf4db39" referent="individual" x="0" y="0"/>
<concept id="c_f081c276-57ff-4650-94ec-6e40dfd38023" idMarker="http://www.lirmm.fr/cogui#i_80311575-7d72-4af7-bdbe-a19c4bbcf248" idType="http://www.lirmm.fr/cogui#ct_cd84c648-ef22-4854-8e8c-a6654c0386be" referent="individual" x="185" y="70"/>
<concept id="c_f0229ed1-c913-4373-af9c-361a90a56e90" idMarker="http://www.lirmm.fr/cogui#i_435d513c-1b39-43b1-9b6d-310fa0ee46d3" idType="http://www.lirmm.fr/cogui#ct_710bed80-a33e-4a13-b916-15fbb3357e8d" referent="individual" x="330" y="170"/>
<concept id="c_dbe5b7cb-7d00-44f1-8b9a-832d5b61a126" idMarker="http://www.lirmm.fr/cogui#i_efbef15b-d6e2-4c0a-8155-ecaae75cc673" idType="http://www.lirmm.fr/cogui#ct_feeca670-2f1c-433e-9271-4cffeda1e929" referent="individual" x="445" y="260"/>
<relation id="r_10008dd3-5426-4c87-8651-049045f98376" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="90" y="70"/>
<relation id="r_8ef0b4bf-3cb6-4dde-9c83-903cb459872a" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="235" y="135"/>
<relation id="r_563d1804-04eb-45d4-81c9-f4bd4782e0b1" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="355" y="260"/>
<edge cid="c_f55e1936-7842-4518-b460-bb34a9000871" label="1" rid="r_10008dd3-5426-4c87-8651-049045f98376"/>
<edge cid="c_f081c276-57ff-4650-94ec-6e40dfd38023" label="2" rid="r_10008dd3-5426-4c87-8651-049045f98376"/>
<edge cid="c_f081c276-57ff-4650-94ec-6e40dfd38023" label="1" rid="r_8ef0b4bf-3cb6-4dde-9c83-903cb459872a"/>
<edge cid="c_f0229ed1-c913-4373-af9c-361a90a56e90" label="2" rid="r_8ef0b4bf-3cb6-4dde-9c83-903cb459872a"/>
<edge cid="c_f0229ed1-c913-4373-af9c-361a90a56e90" label="1" rid="r_563d1804-04eb-45d4-81c9-f4bd4782e0b1"/>
<edge cid="c_dbe5b7cb-7d00-44f1-8b9a-832d5b61a126" label="2" rid="r_563d1804-04eb-45d4-81c9-f4bd4782e0b1"/>
</graph>
<graph id="_query1" label="Richard senior to Robyn" nature="query" set="default_set">
<concept id="c_90dc1159-1d02-4707-a444-2e95817d8667" idMarker="http://www.lirmm.fr/cogui#i_d1a8babc-3d35-4580-b4d5-d3cd4c323c98" idType="http://www.lirmm.fr/cogui#ct_043ea910-5f86-4150-b0f1-1418acf4db39" referent="individual" x="30" y="165"/>
<concept id="c_4af4cf1c-5383-413b-bee2-7a4c513fd37e" idMarker="http://www.lirmm.fr/cogui#i_efbef15b-d6e2-4c0a-8155-ecaae75cc673" idType="http://www.lirmm.fr/cogui#ct_feeca670-2f1c-433e-9271-4cffeda1e929" referent="individual" x="45" y="25"/>
<relation id="r_c51c5a9c-3cf5-4402-a356-03c9882f6b78" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="75" y="95"/>
<edge cid="c_90dc1159-1d02-4707-a444-2e95817d8667" label="1" rid="r_c51c5a9c-3cf5-4402-a356-03c9882f6b78"/>
<edge cid="c_4af4cf1c-5383-413b-bee2-7a4c513fd37e" label="2" rid="r_c51c5a9c-3cf5-4402-a356-03c9882f6b78"/>
</graph>
<rule id="_rule1">
<hypt>
<graph id="_rule1_hypt" label="seniority rule" nature="rule" set="default_set">
<concept id="c_591883b6-ca82-42ee-bd35-b4ce29ffd286" idType="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" x="30" y="45"/>
<concept id="c_f765dff9-1cd4-42f1-bf95-87cbda00257d" idType="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" x="30" y="173"/>
<concept id="c_669f89c9-eb93-4caa-aa90-f8e31be92245" idType="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" x="30" y="293"/>
<relation id="r_93ecba23-873d-490c-8ce3-40611158006b" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="45" y="113"/>
<relation id="r_257f3815-2ac4-4b9e-8b8c-7d9ae6259b52" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="53" y="233"/>
<edge cid="c_591883b6-ca82-42ee-bd35-b4ce29ffd286" label="1" rid="r_93ecba23-873d-490c-8ce3-40611158006b"/>
<edge cid="c_f765dff9-1cd4-42f1-bf95-87cbda00257d" label="2" rid="r_93ecba23-873d-490c-8ce3-40611158006b"/>
<edge cid="c_f765dff9-1cd4-42f1-bf95-87cbda00257d" label="1" rid="r_257f3815-2ac4-4b9e-8b8c-7d9ae6259b52"/>
<edge cid="c_669f89c9-eb93-4caa-aa90-f8e31be92245" label="2" rid="r_257f3815-2ac4-4b9e-8b8c-7d9ae6259b52"/>
</graph>
</hypt>
<conc>
<graph id="_rule1_conc">
<concept id="c_fe469224-c26a-49dc-a17a-697faa20aca3" idType="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" x="173" y="53"/>
<concept id="c_656473af-5b41-4ed7-b4fc-be3af9ce544d" idType="http://www.lirmm.fr/cogui#ct_d7a78641-722f-4609-8f5a-90affc111e00" x="180" y="293"/>
<relation id="r_3b36e657-bc62-4050-baad-c3a04ade3af2" idType="http://www.lirmm.fr/cogui#rt_af40394c-9e62-4e92-b05b-352de5db876f" x="203" y="158"/>
<edge cid="c_fe469224-c26a-49dc-a17a-697faa20aca3" label="1" rid="r_3b36e657-bc62-4050-baad-c3a04ade3af2"/>
<edge cid="c_656473af-5b41-4ed7-b4fc-be3af9ce544d" label="2" rid="r_3b36e657-bc62-4050-baad-c3a04ade3af2"/>
</graph>
</conc>
<conPts>
<couple idC1="c_591883b6-ca82-42ee-bd35-b4ce29ffd286" idC2="c_fe469224-c26a-49dc-a17a-697faa20aca3"/>
<couple idC1="c_669f89c9-eb93-4caa-aa90-f8e31be92245" idC2="c_656473af-5b41-4ed7-b4fc-be3af9ce544d"/>
</conPts>
</rule>
</cogxml>
更新此图显示了我的程序现在的样子。我希望一列中的概念名称和另一列中的代码。我无法让它停止为每种概念类型显示相同的代码。
答案
因为foreach()
数据是从同一个xml源中提取的,所以在外面只使用一个dom ctype
循环。但是,仍然遵循@michi's answer的结构到您之前的问题(例如在循环外初始化dom对象)。
$newdom = new DOMDocument('1.0', 'utf-8');
$newdom->formatOutput = true;
$newdom->preserveWhiteSpace = false;
$xpath = new DOMXPath($dom);
<table border=1>
<tr><th>Concept Name</th><th>Relation Type</th><th>CoGui XML</th><th>CharGer XML</th></tr>
<?php
foreach ($dom->getElementsByTagName("ctype") as $ctype) {
?>
<tr><td><?php echo $ctype->getAttribute('label'); ?></td><td></td>
<?php
$newdom->loadXML("<cogxml><support><conceptTypes /><relationTypes /></support></cogxml>");
$newnode = $newdom->importNode($ctype, true);
$newdom->getElementsByTagName("conceptTypes")->item(0)->appendChild($newnode);
$id = $ctype->getAttribute('id');
foreach ($xpath->query("//cogxml/support/conceptTypes/order[@id1='$id']") as $order) {
$newnode = $newdom->importNode($order, true);
$newdom->getElementsByTagName("conceptTypes")->item(0)->appendChild($newnode);
}
foreach ($xpath->query("//cogxml/support/relationTypes/rtype[contains(@idSignature, '$id')]") as $rtype) {
$newnode = $newdom->importNode($rtype, true);
$newdom->getElementsByTagName("relationTypes")->item(0)->appendChild($newnode);
}?>
<td><xmp><?php echo $newdom->saveXML(); ?></xmp></td><td></td></tr><?php
}?>
</table>
另一答案
你的代码很乱。
第一条规则:将php hard job与输出分开。 HTML的最终输出是:
<table border=1>
<tr>
<th>Concept Name</th><th>Relation Type</th><th>CoGui XML</th><th>CharGer XML</th>
</tr>
<tr>
<td>DATA LABEL</td><td></td><td><xmp>NEWDOM</xmp></td><td></td>
</tr>
<td><xmp>NEWDOM</xmp></td><td></td></tr>
<td><xmp>NEWDOM</xmp></td><td></td></tr>
(...)
</table>
如您所见,您的表结构已损坏。发生这种情况是因为你在<tr>
循环中打开foreach
并在嵌套的foreach
中关闭它。
执行所有比较/创建新XML / etc的东西...将值放在像这样的多维数组中(而不是直接打印它):
$output =
[
[
'concept' => ...
'relation' => ...
'cogui' => ...
'charger' => ...
],
[
'concept' => ...
'relation' => ...
'cogui' => ...
'charger' => ...
],
[ ... ]
]
然后,清理代码,编写如下HTML:
<table border=1>
<tr>
<th>Concept Name</th>
<th>Relation Type</th>
<th>CoGui XML</th>
<th>CharGer XML</th>
</tr>
<?php foreach( $output as $row ): ?>
<tr>
<td><?php echo $row['concept']; ?></td>
<td><?php echo $row['relation']; ?></td>
<td><?php echo $row['cogui']; ?></td>
<td><?php echo $row['charger']; ?></td>
</tr>
<?php endforeach; ?>
</table>
这有助于更好地维护代码。
边注:
<xmp>
是一个现已弃用的HTML 3.2标记。考虑使用以下方法替换它:
<td><?php echo htmlentities( $row['cogui'] ); ?></td>
要么:
<td><?php highlight_string( $row['cogui'] ); ?></td>
以上是关于循环遍历XML文件并显示在表中的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?