Как я могу конвертировать XML мыло запрос в DOMDocument с помощью Symfony 3.4 - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь конвертировать XML-код в Dom Я успешно создал запросы создания, обновления, удаления мыла, все работает нормально, проблема в читаемости XML-кода, немного сложнее, теперь я решил преобразовать XML в DOM

Создать действие:

/**
 *  Returns the soap create body for the Newsletter Entity.
 * 
 * @param Newsletter $newsletter
 * @param type $action
 * @return string 
 */
public function getSoapCreateNewsletterBody(Newsletter $newsletter) {

    $soapBody = '
     <Create xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
                <entity xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                    <b:Attributes xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic">' .
            $this->getFieldXml(self::STRING_TYPE, $newsletter->getEmail(), 'new_email') .
            $this->getFieldXml(self::STRING_TYPE, $newsletter->getName(), 'new_name') .
            '</b:Attributes>
                    <b:EntityState i:nil="true"/>
                    <b:FormattedValues xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic"/>
                    <b:Id>00000000-0000-0000-0000-000000000000</b:Id>
                    <b:LogicalName>new_newsletter</b:LogicalName>
                    <b:RelatedEntities xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic"/>
                </entity>
                </Create>';

    return $soapBody;
}

Удалить действие:

 /**
 * Returns the soap delete body for th Newsletter Entity
 * 
 * @param Newsletter $newsletter
 * @return string
 */
public function getSoapDeleteNewsletterBody(Newsletter $newsletter){

       $soapBody = '
              <Delete xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
                 <entityName>new_newsletter</entityName>
                 <id>' . $newsletter->getNewsletteridcrm() . '</id>                      
              </Delete>';

    return $soapBody;
} 

Здесь я пытаюсь конвертировать XML в DOM, проблема с кодом ниже

/**
 * Returns the soap delete body for th Newsletter Entity
 * 
 * @param Newsletter $newsletter
 * @return string
 */
public function getSoapDeleteNewsletterBody(Newsletter $newsletter){

    /* Generate the DeleteRequest message */
    $deleteRequestDOM = new DOMDocument();
    $deleteNode = $deleteRequestDOM->appendChild( $deleteRequestDOM->createElementNS( 'http://schemas.microsoft.com/xrm/2011/Contracts/Services', 'Delete' ) );       
    $deleteNode->appendChild( $deleteRequestDOM->createElement( 'new_newsletter', $newsletter ) );
    $deleteNode->appendChild( $deleteRequestDOM->createElement( 'id', $newsletter->getNewsletteridcrm()->ID ) );
    /* Return the DOMNode */
    return $deleteNode;     
} 

Может кто-нибудь сказать мне, как я могу это сделать ... Заранее спасибо ...

Обновлен рабочий код:

/**
 * Returns the soap delete body for th Newsletter Entity
 * 
 * @param Newsletter $newsletter
 * @return string
 */
public function getSoapDeleteNewsletterBody(Newsletter $newsletter){

    /* Generate the DeleteRequest message */
    $deleteRequestDOM = new DOMDocument();
    $deleteNode = $deleteRequestDOM->appendChild( $deleteRequestDOM->createElementNS( 'http://schemas.microsoft.com/xrm/2011/Contracts/Services', 'Delete' ) );       
    $deleteNode->appendChild( $deleteRequestDOM->createElement( 'entityName', 'new_newsletter' ) );

    $deleteNode->appendChild( $deleteRequestDOM->createElement( 'id', $newsletter->getNewsletteridcrm()) );
    /* Return the DOMNode */

    return $deleteRequestDOM->saveXML($deleteRequestDOM->documentElement);
} 

1 Ответ

0 голосов
/ 08 ноября 2018

Ваша проблема вызвана этой строкой:

$deleteRequestDOM->createElement( 'new_newsletter', $newsletter )

Здесь $newsletter - это объект Newsletter, но createElement ожидает строку в качестве второго аргумента (значение элемента XML). Взгляните на документацию этой функции.

То, что вы действительно хотите, это ...

$deleteRequestDOM->createElement('entityName', 'new_newsletter')

... для создания этого XML-узла:

<entityName>new_newsletter</entityName>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...