2

これは私のgeneral.xmlファイルです:-

<?xml version="1.0" encoding="UTF-8"?>
<results>
    <numFound>10</numFound>
    <QTime>4</QTime>
    <result>
        <distance>1071.59873299109</distance>
        <name>Irungattukottai</name>
    </result>
    <result>
            <distance>1892.33578431928</distance>
            <name>Valapuram</name>
       </result>
</results>

region.xml:-

<childrens>
    <child_5068 entity_id="5069" value="Irungattukottai" parent_id="4068"/>
    <child_5068 entity_id="7140" value="Valapuram" parent_id="4068"/>
</childrens>

product.xml:-

<products>
  <product_id value="1">
    <tab_id value="351">
      <tab_name value="test1"/>
      <dist_region value="5069"/>
      <dist_region value="5069"/>
      <dist_region value="5069"/>
    </tab_id>
  </product_id>
  <product_id value="2">
    <tab_id value="352">
      <tab_name value="test2"/>
      <dist_region value="4457"/>
      <dist_region value="7140"/>
      <dist_region value="5069"/>
    </tab_id>
  </product_id>
</products>

私はこのようなものを試してみたいこの3つのxmlファイルを持っています。
general.xml ファイルの要素で<name>Irungattukottai</name>
、この名前が exit の場合はregion.xmlそこに到達しentity_id
、entity_id が exit の場合はそこに到達し、そこに要素の属性値product.xmlを返す...product_id

私はこのコードを試しています:-

<?php
$g = file_get_contents('general.xml');
$r = file_get_contents('region.xml');
$p = file_get_contents('product.xml');

$general = simplexml_load_string($g);
$region = simplexml_load_string($r);
$product = simplexml_load_string($p);

$name = (string)$general->result->name;

if (strlen(trim($name))==0) exit('name not found');

list($entity) = $region->xpath("//*[@value='$name']/@entity_id");
$entity=(string)$entity;

if (strlen(trim($entity))==0) exit('entity_id not found');

list($prid) = $product->xpath("//dist_region[@value='$entity']/ancestor::product_id/@value");
$prid=(string)$prid;

echo "City Name:- $name, Entity_id:- $entity, Product_id:- $prid";
?>

このコードは完全に機能しますが、値は 1 つだけです。例: -general.xml最初のルート<name>Irungattukottai</name>と 2 番目のルートに 2 つのルート<name>Valapuram</name>
がありますが、私のコードは最初の要素のみを取得し、壁の xml ファイルを取得しようとはしません...

これは私の正しい出力です:-

city Name:- Irungattukottai, Entity_id:- 5079, Product_id:- 1

しかし、私はこのタイプの出力をしたい:-

city Name:- Irungattukottai, Entity_id:- 5079, Product_id:- 1
city Name:- Valapuram , Entity_id:- 7140, Product_id:- 2
4

4 に答える 4

0

上記の両方の答えを使用して、これを試してください:-

  <?php
    foreach($general->result as $row){
    if(isset($row->name)){
    //create one variable and store in value.
    $name = $row->name;
     //all you code for region.xml and then for product.xml

    }
    echo "name:- $name,Entity:- $entity, product:- $prid"."<br>";
    }

?>
于 2013-03-28T07:41:49.797 に答える
0

$general の配列を反復する必要があります。

やってみてください:

echo '<pre>';
print_r($general);
echo '</pre>';

xml ファイルのようにすべての要素を含む配列を取得するかどうかを確認します。

于 2013-03-28T05:24:39.697 に答える
0

これを試して:

$xml = simplexml_load_file( 'general.xml' );
$cities = $xml->xpath( '//result/name' );

$cityCount = count( $cities );
if( $cityCount ) {
    $region = simplexml_load_file( 'region.xml' );
    foreach( $cities as $city ) {
        $regions = $region->xpath( '//*[@value="'. ( string ) $city . '"]/@entity_id' );
        if( count ( $regions ) ) {
            $product = simplexml_load_file( 'products.xml' );
            $products = $product->xpath( '//dist_region[@value="' . ( string ) $regions[ 0 ][ 'entity_id' ] . '"]/ancestor::product_id/@value' );
            if( count( $products ) ) {
                foreach( $products as $p ) {
                    echo 'city Name:- ' . ( string ) $city . ', Entity_id:- ' . ( string ) $regions[ 0 ][ 'entity_id' ] . ', Product_id:- ' . $p[ 'value' ] . "\n";
                }
            }
        }
    }
}

出力

city Name:- Irungattukottai, Entity_id:- 5069, Product_id:- 1
city Name:- Irungattukottai, Entity_id:- 5069, Product_id:- 2
city Name:- Valapuram, Entity_id:- 7140, Product_id:- 2
于 2013-03-28T06:02:17.833 に答える
0

general.xml フィードを取得するコードは問題ありません。

として名前を取得できます

$name1 = (string)$general->result[0]->name;
$name2 = (string)$general->result[1]->name;
or you can use loop to get name one by one.

<?php
foreach($general->result as $row){
if(isset($row->name)){
  // do your logic here for region.xml and then for product.xml
}
}
?>
于 2013-03-28T05:37:30.083 に答える