Как распечатать ответ XML из массива результатов базы данных XML на PHP?

0

У меня есть запрос, который возвращает мои строки, как уже сделал 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>';
Теги:
database
arrays

1 ответ

1
Лучший ответ

Не выводите простую строку с print_r(), используйте echo или print().

Браузер не разделяет ваши узлы, он просто отображает его как HTML. Он игнорирует неизвестные элементы и выводит текстовые узлы. Проверьте исходный вид в браузере.

Чтобы браузер распознал XML, отправьте его.

header('Content-Type: application/xml; charset=utf-8');
echo $result[0];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню