У меня есть запрос, который возвращает мои строки, как уже сделал XML. Если это имеет значение, это Oracle. Когда я запускаю свой запрос изначально, функция XMLELEMENT.
Например, из документации Oracle:
SELECT XMLELEMENT("Emp",
XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
XMLELEMENT("Dept", e.department_id),
XMLELEMENT("Salary", e.salary)) AS "Emp Element"
FROM employees e
WHERE e.employee_id = 206;
Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
<Dept>110</Dept>
<Salary>8300</Salary>
</Emp>
Как заставить PHP возвращать XML файл, поэтому мне не нужно делать никаких '<'. $row['lastname']. '>'
'<'. $row['lastname']. '>'
'<'. $row['lastname']. '>'
; ' типа. Мне не нужно ничего подобного, потому что все это обрабатывается в моем запросе.
Всякий раз, когда я использую print_r()
он удаляет все мои узлы и дает мне только значение в узлах. То же самое с ключом, значением в foreach
.
<Emp ID="206" LAST_NAME="Gietz">
<Dept>110</Dept>
<Salary>8300</Salary>
</Emp>
заканчивается тем, что все xml-теги разделены,
110
8300
Мой код:
$dbh = new PDO('oci:dbname=tnsname,'username','password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare($sql);
$stmt->execute();
$result = $stmt->fetch();
array_shift($result);
//Create a new DOM document and load XML into its internal XML tree
$xml = new SimpleXMLElement($result[0]);
echo $xml->asXML();
print_r($result);
EDIT: закончилось этим, спасибо за ThW.
header('Content-Type: application/xml; charset=utf-8');
echo '<employee>';
foreach ($result as $key=>$value)
{
echo $result->$key;
}
echo '</employee>';
Не выводите простую строку с print_r()
, используйте echo
или print()
.
Браузер не разделяет ваши узлы, он просто отображает его как HTML. Он игнорирует неизвестные элементы и выводит текстовые узлы. Проверьте исходный вид в браузере.
Чтобы браузер распознал XML, отправьте его.
header('Content-Type: application/xml; charset=utf-8');
echo $result[0];