2017-10-02 7 views
0

referencedObject 대신 이미지 URL을 표시하려고합니다. Referenced Object가 올바른 위치에 있지만 참조 된 객체에 해당하는 이미지 URL로 바꿀 때 올바른 위치에서 코드가 대체되지 않고 텍스트 위의 약 2 줄 정도가 표시됩니다.PHP에서 참조 객체 값 바꾸기 SimpleXML

PHP에서 SimpleXML 사용. 여기

<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> 

내가 각 ID의 값을 얻고 방법이다 : 나는 관련 데이터를 찾는 데 도움이 XPath를 사용했습니다 pastebin.com/raw/fnWbifx0

+0

다음은 원래 xml 응답입니다. https://pastebin.com/raw/fnWbifx0 – Srinivas

답변

0

:

여기
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']; 
} 

원래 XML 응답입니다.

각각 renderMultiMediaobservationMedia 개체를 가리키며 문제를 제대로 이해했기를 바랍니다. 여기서 XPath를 사용하여 해당 데이터를 찾을 수 있습니다. 단락 번호가 항상 올바르지 않은 미디어 정보의 순서와 일치한다고 가정했습니다. 당신은 코드에서 볼 수 있듯이

<?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); 

, 나는 또한 첫째을 위해 다음 (기본 네임 스페이스가 registerXPathNamespace 방법을 사용하여 설정을 고려으로 d:가) 어떤 renderMultiMedia 요소를 찾기 위해 그것을 변경했습니다 각 요소는 observationMedia 요소가있는 referencedObject 특성을 참조합니다.

그것은 배열을 구성합니다. 그러나 데이터로 작업하는 방법을 변경할 수 있기를 바랍니다.