XMLファイルがPHPでエコーされていて、すべてのコードがうまく動作しますが、問題はタグ内にあります(検査と属性は何のエコーであるのか)複数のタグ(例、つまり、受験番号としてエコーされているものだ)と私は、テーブルにデータをエコーしていると私はそれがこのようにそれを表示したい:PHP、XML、エコー時に繰り返し属性の問題
|第1章|第2章|
| - 試験1 --- |試験1 --- |
| - 試験2 --- |試験2 --- |
|第3章|第4章|
| - 試験1 --- |試験1 --- |
しかし、私は何を取得していますがこのようなものである:(私はなぜ知っているけれども)
|第1章|
| - 試験1 --- |
|第1章|
| - 実験2 --- |
|第2章|
| - 試験1 --- |
私はテーブルデータ内の変数として持っているタグの属性をエコーしていますので、それはタグの属性を繰り返し続けていると私は理由を知っています。だから問題はなぜ起こっているのではなく、私が望むようにそれを表示するためにどのように変更できるのでしょうか。私は推測
は多分つ以上があるかどう属性を削除する方法があります(私はあなたがそれを削除することができます知っているが、私は一度それを表示する方法を知っていると他の人を削除しないでください)
コードをそのI持っているが、このようなものです:
XMLで
<maintag>
<exam chapter="Chapter 1">
<ex id="1">Exam 1</ex>
<ex id="2">Exam 2</ex>
<ex id="3">Exam 3</ex>
</exam>
<exam chapter="Chapter 2">
<ex id="4">Exam 1</ex>
<ex id="5">Exam 2</ex>
</exam>
<exam chapter="Chapter 3">
<ex id="6">Exam 1</ex>
</exam>
<exam chapter="Chapter 4">
<ex id="7">Exam 1</ex>
<ex id="8">Exam 2</ex>
<ex id="9">Exam 3</ex>
<ex id="10">Exam 4</ex>
</exam>
</maintag>
PHP
<?php
$xml = DOMDocument::load('examdata.xml');
$xpath = new DOMXPath($xml);
$exams = $xpath->query('//exam/ex');
$istyle = 1; //This is to add gray after every other row
echo " <table cellpadding=\"0\" cellspacing=\"3\" border=\"0\" width=\"60%\" align=\"center\">
<tr id=\"center\" bgcolor=\"#999\">
<td>Book</td>
<td>Exam</td>
<td>ID</td>
<td>Student's Exam Status</td>
</tr>
";
foreach($exams as $exams2) {
$chapter = $exams2->parentNode->getAttribute('chapter');
$examid = $exams2->getAttribute('id');
$examname = $exams2->nodeValue;
if ($examid < 5) { //where it says 5 there goes a php variable where it has the queried user's exam number from the database, again this is all finished no need to change this.
$exstatus = "You already took this exam.";
}elseif ($examid == 5) {
$exstatus = "This is your exam (exam link)";
}elseif ($examid > 5) {
$exstatus = "You are not yet on this exam";
}
echo "<tr id=\"center\"";
if ($istyle % 2 == 0)
echo " bgcolor=\"#ccc\"";
echo ">
<td>$chapter</td>
<td>$examname</td>
<td>$examid</td>
<td>$exstatus</td>
</tr>";
$istyle++;
}
echo "
</table>";
?>
テーブル構造は、私は私がそれをしたいと私は上記のそれを得ていたと述べた方法とは異なることに注意してください、私はそれがあった方法でそれを残すことができなかったので、私はそれを変更しました。
私が変更したいのは、章が書かれている箇所です.1回目と2回目以降の試験を表示するには、一度に表示したいと思います。章の横に次の章(この例では第2章)とその試験の下に1とその試験の下に置く。その後、試験2の下に別のテーブル行を作成し、他の2つの章とその下の他の試験を作成します。
試験はパターンに従って行われていないことに注意してください。これは数百ものファイルがあり、上記のものとは異なる値を持つため編集されたバージョンのファイルです。
上記のコードは機能していますが、自分の要件を満たすことができるように変更したいだけです。配列から項目、代わりに...
foreach($exams as $exams)
を取得する
あなたのソリューションを共有していることは素晴らしいことです。私はフォーラムの待機期間が理にかなっていると思う。そうでなければ、それは誤用されるからだ。評価点を収集するために、質問を書いてすぐに答えを出すことができます。 – martinstoeckli