Канонизация (c14n) XML-кода с использованием метода класса PHP

#php #xml

#php #xml

Вопрос:

Я нашел в документации PHP метод из класса DOMNode, определенный как DOMNode::C14N (http://cl1.php.net/manual/en/domnode.c14n.php ). К сожалению, мне было трудно найти полные примеры его использования, и я безуспешно пробовал некоторый код … вероятно, из-за моего нулевого опыта использования собственных классов PHP.

 <?php
$Document = '<Document>... (more XML code to canonicalize)</Document>';

$xml = new C14N();
$xml = $Document->C14N();
 

При выполнении я получаю:

 Fatal error: Class 'C14N' not found in C:wampwww...
 

Я провел исследование, и класс DOMNode включен в расширение DOM, которое, как предполагается, установлено и включено по умолчанию, плюс c14n — это не класс, а метод.

У меня есть PHP 5.3.13.

Заранее спасибо.

Ответ №1:

Чтобы помочь вам прочитать руководство по PHP здесь:

 DOMNode::C14N
 

Это означает , что для класса DOMNode существует метод с именем C14N .

Итак, где найти такой DOMNode, чтобы вы могли вызвать этот метод?

Ну, например, DOMDocument — это DOMNode, смотрите следующую страницу руководства: http://cl1.php.net/manual/en/class.domdocument.php в нем пишут , что

 DOMDocument extends DOMNode {
 

Extends означает is a , поэтому DOMDocument является DOMNode . Прокрутка вниз по этой странице уже даст вам некоторый общий пример кода о том, как создать такой объект, затем вам нужно только вызвать метод:

 // "Create" the document.
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$xml->loadXML('<Document>... (more XML code to canonicalize)</Document>');
echo $xml->C14N();
 

Надеюсь, это поможет вам сориентироваться.

Пример (онлайн-демонстрация):

 <?php
// "Create" the document.
$xml = new DOMDocument( "1.0", "ISO-8859-15" );
$xml->loadXML('<Document b="c"    

f="e"  a="j">...

<!-- stupid whitespace example -->

   mother told me to        go shopping

</Document>');

echo $xml->C14N();
 

Вывод программы

 <Document a="j" b="c" f="e">...



   mother told me to        go shopping

</Document>
 

Как показано в этом примере, атрибуты отсортированы, а комментарий удален.