2017-10-02 5 views
0

referencedObjectの代わりにイメージのURLをエコーし​​ようとしています。 Referenced Objectを正しい場所に取得していますが、referencedObjectに対応するイメージ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の値を取得しています方法です。ここで

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応答です:pastebin.com/raw/fnWbifx0

+0

元のXML応答は次のとおりです。https://pastebin.com/raw/fnWbifx0 – Srinivas

答えて

0

私は、関連するデータを見つけるのを助けるためにXPathを使用しました。

私はこの問題を正しく理解しておきたいと思います。それぞれ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属性を参照します。

これは配列を構築しますが、データの操作方法を変更できることを願っています。

関連する問題