循环遍历XML文件并显示在表中

问题描述 投票:1回答:2

我试图得到它,以便对于概念类型列中的每个概念类型,它根据概念类型显示不同的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>

更新此图显示了我的程序现在的样子。我希望一列中的概念名称和另一列中的代码。我无法让它停止为每种概念类型显示相同的代码。

enter image description here

php xml dom
2个回答
1
投票

因为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>

See eval.in


1
投票

你的代码很乱。

第一条规则:将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>
© www.soinside.com 2019 - 2024. All rights reserved.