2017-10-02 2 views
0

J'essaie de répercuter l'URL de l'image à la place de l'objet référencé. J'obtiens l'objet référencé à l'endroit correct mais quand j'essaye de le remplacer par l'URL d'image correspondant à l'objet référencé, le code n'est pas remplacé au bon endroit, il est affiché environ 2 lignes au-dessus du texte.Remplacer la valeur de l'objet de référence en PHP SimpleXML

Utilisation de SimpleXML avec PHP.

<component> 
<section ID="Ld8e0a7b8-429c-4a7d-84ff-8b4698b7adc7"> 
<title>DESCRIPTION </title> 
<text> 
    <paragraph>Lorem ipsum dolor sit amet, consectetur adipiscing elit...</paragraph> 

    <paragraph>Here is the image 1 </paragraph> 
    <paragraph> 
     <renderMultiMedia referencedObject="Lc0d31387-d262-4702-8053-0207e1a3fc91"/> 
    </paragraph> 
    <paragraph>Here is Image 2 , tempor incidid labore et dolore magna aliqua. Ut enim ad minim </paragraph> 
    <paragraph> 
     <renderMultiMedia referencedObject="L3dcd8ff8-678a-4e9f-8bb2-d6f3c35d1c10"/> 
    </paragraph> 
    <paragraph>tempor incidid labore et dolore magna aliqua. Ut enim ad minim </paragraph> 
    <paragraph>tempor incidid labore et dolore magna aliqua. Ut enim ad minim </paragraph> 
    <paragraph/> 
</text> 
<component> 
    <observationMedia ID="Lc0d31387-d262-4702-8053-0207e1a3fc91"> 
     <text>image description</text> 
     <value mediaType="image/jpeg" xsi:type="ED"> 
      <reference value="Image1.jpg"/> 
     </value> 
    </observationMedia> 
</component> 
<component> 
    <observationMedia ID="L3dcd8ff8-678a-4e9f-8bb2-d6f3c35d1c10"> 
     <text>image description</text> 
     <value mediaType="image/jpeg" xsi:type="ED"> 
      <reference value="Molecule2.jpg"/> 
     </value> 
    </observationMedia> 
</component> 
</section> 

Voici comment je reçois les valeurs de chaque id:

for($i=0; $i < $pcount; $i++) //$pcount = no. of paragraphs in the xml 
{ 
    $reference_value = (string) $component->section->component[$i]->observationMedia->value->reference['value']; 
    $referencedObject = (string) $component->section->text->paragraph[$i]->renderMultiMedia['referencedObject']; 
    $observationMedia_ID = (string) $component->section->component[$i]->observationMedia['ID']; 
} 

Voici la réponse XML d'origine: pastebin.com/raw/fnWbifx0

+0

Voici la réponse xml d'origine: https://pastebin.com/raw/fnWbifx0 – Srinivas

Répondre

0

Je l'ai utilisé XPath pour aider à trouver les données pertinentes.

J'espère avoir bien compris le problème, que chaque renderMultiMedia fait référence à un objet observationMedia. C'est là que j'ai utilisé XPath pour m'assurer que je trouve les données correspondantes. Vous avez supposé que le numéro de paragraphe correspond à l'ordre des informations sur les médias, ce qui n'est pas toujours correct.

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$xml = simplexml_load_file("so.xml"); 
$xml->registerXPathNamespace("d", "urn:hl7-org:v3"); 
$rmElements = $xml->xpath("//d:renderMultiMedia"); 
$mediaData = []; 
foreach ($rmElements as $media) 
{ 
    $referencedObject = (string)$media['referencedObject']; 
    $mediaElement = $xml->xpath("//d:observationMedia[@ID='$referencedObject']")[0]; 
    $reference_value = (string) $mediaElement->value->reference['value']; 
    $observationMedia_ID = (string) $mediaElement['ID']; 
    $mediaData[] = [ 'referencedObject' => $referencedObject, 
      'reference_value' => $reference_value, 
      'observationMedia_ID' => $observationMedia_ID 
    ]; 

} 
print_r($mediaData); 

Comme vous pouvez le voir dans le code, je l'ai aussi changé pour chercher d'abord pour les renderMultiMedia éléments (le d: est là que cela prend en compte l'espace de noms par défaut configuré à l'aide de la méthode registerXPathNamespace) puis pour chacun, il renvoie l'attribut referencedObject avec l'élément observationMedia.

Il construit un tableau - mais j'espère que vous pouvez le modifier à la façon dont vous avez besoin de travailler avec les données.