2017-10-09 11 views
1

xmlの中にいくつかの要素を取り込むための関数(深さ...)を作成します。 情報を抽出する際にループに問題があります。 特定のxml情報を抽出する方法

はありがとう

例:

echo $IceCatByEan->getSpecByName('width'); // size 
    echo $IceCatByEan->getSpecByName('depth'); // size 
    echo $IceCatByEan->getSpecByName('dimension_type'); // mn, cm 

ceCatByEan-> getSpecByName( 'dimension_type'); // mnを

機能

// specificationName (like with, depth, dimension_type) 

public function getSpecByName($specificationName) { 
    $xml = $this->getSearchProductEanXML(); 
    $spec_item = $xml->xpath("//ProductFeature"); 

    foreach ($spec_item as $feature) { 
     ... 
    } 
    return $element; 
} 

アレイプレゼンテーション

[機能] =>配列 ( [44095] =>配列 ( [名] =>パッケージ幅 [値] => 2453.64 [記号] => mm [pres_value] => 2453.6mm )

XMLファイル

<ProductFeature Localized="0" ID="241810932" Local_ID="0" Value="2192.02" CategoryFeature_ID="87011" CategoryFeatureGroup_ID="10073" No="100025" Presentation_Value="2192 mm" Translated="0" Mandatory="1" Searchable="0"> 
    <LocalValue Value="2192"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="1649"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="5143" langid="1" Value="Width"/> 
    </Feature> 
</ProductFeature> 

<ProductFeature Localized="0" ID="241810955" Local_ID="0" Value="71.12" CategoryFeature_ID="87012" CategoryFeatureGroup_ID="10073" No="100024" Presentation_Value="71.1 mm" Translated="0" Mandatory="1" Searchable="0"> 
    <LocalValue Value="71.1"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="1650"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="5145" langid="1" Value="Depth"/> 
    </Feature> 
</ProductFeature> 

<ProductFeature Localized="0" ID="241810944" Local_ID="0" Value="1249.68" CategoryFeature_ID="87013" CategoryFeatureGroup_ID="10073" No="100023" Presentation_Value="1249.7 mm" Translated="0" Mandatory="1" Searchable="0"> 
    <LocalValue Value="1249.7"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="1464"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="4625" langid="1" Value="Height"/> 
    </Feature> 
</ProductFeature> 

<ProductFeature Localized="0" ID="241811006" Local_ID="0" Value="2453.64" CategoryFeature_ID="87036" CategoryFeatureGroup_ID="10078" No="99989" Presentation_Value="2453.6 mm" Translated="0" Mandatory="0" Searchable="0"> 
    <LocalValue Value="2453.6"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="3808"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="44095" langid="1" Value="Package width"/> 
    </Feature> 
</ProductFeature> 

<ProductFeature Localized="0" ID="241811027" Local_ID="0" Value="604.52" CategoryFeature_ID="87037" CategoryFeatureGroup_ID="10078" No="99988" Presentation_Value="604.5 mm" Translated="0" Mandatory="0" Searchable="0"> 
    <LocalValue Value="604.5"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="3806"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="44061" langid="1" Value="Package depth"/> 
    </Feature> 
</ProductFeature> 

<ProductFeature Localized="0" ID="241811019" Local_ID="0" Value="1480.82" CategoryFeature_ID="87038" CategoryFeatureGroup_ID="10078" No="99987" Presentation_Value="1480.8 mm" Translated="0" Mandatory="0" Searchable="0"> 
    <LocalValue Value="1480.8"> 
    <Measure ID="24"> 
    <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
</LocalValue> 
    <Feature ID="3807"> 
    <Measure ID="24" Sign=""> 
     <Signs><Sign ID="3" langid="1"><![CDATA[mm]]></Sign></Signs> 
    </Measure> 
    <Name ID="44078" langid="1" Value="Package height"/> 
    </Feature> 
</ProductFeature> 

+0

これは有効なXMLファイルですか? 期待される結果/出力は何ですか? – DanielO

+0

この例では、xmlは非常に長いです。 resutは簡単です、私は深さの大きさ、深さの尺度を持つ情報を抽出したいと思います。サイズは、データベース内に含めることも、測定することもできます – yokogeri

答えて

1

私は個々の値を取得するような方法は、XPathを使用して、直接それぞれの値を取り出すことです。

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

$xml = simplexml_load_file("t1.xml"); 

$spec_item = $xml->xpath("//ProductFeature[Feature/Name/@Value='Width']/@Presentation_Value"); 
echo 'Width='.(string)$spec_item[0]; 

出力:

Width=2192 mm 

私は1つの製品だけ(あなたは上記の持っていた例)のデータを持っているので、これが簡素化され、私はちょうどPresentation_Value属性を取得しました。しかし、うまくいけば、そのコンセプトはあなたの後ろのものに容易に適応できる。

XPathの仕組みは、Value属性が 'Width'に設定されたName要素を含むProductFeature要素を探していることです。そこで、Product Feature要素をこれらの要素に絞り込み、Presentation_Value属性を返します。

関連する問題