我的xml看起来喜欢这个
<?xml version="1.0" encoding="utf-8"?>
<personnel>
<person id='1'>
<person_name>John</person_name>
<person_lastname>Doe</person_lastname>
<codes>
<code_number>A132</code_number>
<code_number>B123</code_number>
<code_number>C123</code_number>
</codes>
<person_code>
<code_title>Developer</requisition_title>
<code_relocation>15~25%</code_relocation>
</person_code>
</person>
</personnel>
我想创建一个表(使用PHP)哪些行依赖于“代码”下的“code_number”的数量。因此表格应如下所示:
Person ID | Person Name| Person LastName | Code Numbers
_________________________________________________________
1| John| Doe| A123
_________________________________________________________
1| John| Doe| B123
_________________________________________________________
1| John| Doe| C123
我从其他stackoverflow示例获得的我的currrent PHP脚本是:
<?php
$dom = new DOMDocument();
$dom->load('person.xml');
$xpath = new DOMXpath($dom);
echo <<<EOF <table border="1" cellspacing="2" cellpadding="2"> <tr>
<th>Person ID</th>
<th>Person Name</th>
<th>Person LastName </th>
<th>Code Numbers</th>
</tr>
EOF;
$persons = $xpath->evaluate('//person');
foreach ($persons as $person) {
echo '<tr>', "\n";
echo '<td>', htmlspecialchars($xpath->evaluate('string(./id)', $person)), '</td>', "\n";
echo '<td>', htmlspecialchars($xpath->evaluate('string(./person_name)', $person)), '</td>', "\n";
echo '<td>', htmlspecialchars($xpath->evaluate('string(./person_lastname)', $person)), '</td>', "\n";
$codes = array();
foreach ($xpath->evaluate('./codes/code_number', $person) as $code_number) {
$codes[] = $code_number->nodeValue;
}
echo '<td>'.htmlspecialchars(implode(', ', $codes)).'</td>', "\n";
echo '</tr>', "\n"; } echo '</table>';
?>
然而,这个输出是基于XML文件中有多少“person id”。 谢谢你的帮助!
答案 0 :(得分:0)
如果您希望每<codes>
每<person>
行1行,那么您需要遍历<codes>
内的<person>
。要<person>
id
使用->getAttribute('id')
-
<?php
$dom = new DOMDocument();
$dom->load('person.xml');
$xpath = new DOMXpath($dom);
echo <<<EOF
<table border="1" cellspacing="2" cellpadding="2"> <tr>
<th>Person ID</th>
<th>Person Name</th>
<th>Person LastName </th>
<th>Code Numbers</th>
</tr>
EOF;
$persons = $xpath->evaluate('//person');
foreach ($persons as $person) {
//loop through each <code_number>
foreach ($xpath->evaluate('./codes/code_number', $person) as $code_number) {
echo '<tr>', "\n";
echo '<td>', htmlspecialchars($person->getAttribute('id')), '</td>', "\n";
echo '<td>', htmlspecialchars($xpath->evaluate('string(./person_name)', $person)), '</td>', "\n";
echo '<td>', htmlspecialchars($xpath->evaluate('string(./person_lastname)', $person)), '</td>', "\n";
echo '<td>'.htmlspecialchars($code_number->nodeValue).'</td>', "\n";
echo '</tr>', "\n";
}
}
echo '</table>';
?>
这导致