0

だから私はこのようなxmlを持っています:

<cars> 
    <brand name="Audi"> 
        <model>A1</model> 
        <model>A3</model>
        <model>A5</model> 
    </brand> 
    <brand name="Ferrari"> 
        <model>F12</model>
        <model>FF</model> 
    </brand> 
</cars>

そして、私が望むのは、これを次のように変換することです: $cars['Audi'][0]['A1'] などですが、そこにある内部テキストをタグに取得する方法がわかりません (例: F12 )。ちなみにsimplexmlで試しています!

だから、今のところ私はこれをやっています:

$doc = new SimpleXmlElement($xml, LIBXML_DTDLOAD); 
$brands = $doc->xpath('//brand[@model="Audi"]');
$model_1 = $brands[0]->model[0];

そしてもちろん何も起こらない…

4

4 に答える 4

1
<cars> 
    <brand name="Audi"> 
        <model>A1</model> 
        <model>A3</model>
        <model>A5</model> 
    </brand> 
</cars>

$cars = simplexml_load_file("cars.xml"); // root tag cars
// echo $cars->brand[0]['name'];
foreach ($cars->brand[0]->model as $model) {
echo $model;
}

この例をさらにクールにしました。

<?php
echo "<head><style>html,body{padding:0;margin:0;background-color:black;text-align:center;}.ul{border-bottom:10px dashed #555555;width:50%;margin-left:25%;margin-right:25%;list-style-type:none;box-shadow:0px 0px 2px gold;}.li{font-size:100px;background-color:silver;color:white;font-family:arial;text-shadow:1px 1px black;}.li:nth-child(even){background-color:yellow;}</style></head><body>";

$cars = simplexml_load_file("cars.xml"); // root tag cars
// echo $cars->brand[0]['name'];

foreach($cars->brand as $brand) {
  echo "<div class='ul'>";
  foreach($brand->model as $model) {
    echo "<div class='li'>";
    echo $model;
    echo "</div>";
  }
  echo "</div>";
}

echo "</body>";
于 2013-01-24T15:30:25.957 に答える
1

これを試して :

//cars/brand[@name="Audi"]/*[1]

エラー:

  1. 属性の一致は@name="Audi"
  2. *[1]最初の子ノードです

$models = $doc->xpath('//cars/brand[@name="Audi"]/*[1]');
var_dump((string)current($models));
于 2013-01-24T15:33:44.070 に答える
1
<?php
$xml = '<cars> 
            <brand name="Audi"> 
                <model>A1</model> 
                <model>A3</model>
                <model>A5</model> 
            </brand> 
            <brand name="Ferrari"> 
                <model>F12</model>
                <model>FF</model> 
            </brand> 
        </cars>';

$doc = simplexml_load_string($xml);

foreach ($doc->children() as $brand) {
    foreach ($brand->children() as $model) {
        $cars[(string)$brand->attributes()->name][] = (string)$model;
    }
}

echo '<pre>';
print_r($cars);
echo '</pre>';
?>
于 2013-01-24T15:36:32.133 に答える
0

わかりましたので、トリックは、反復時にタグを文字列に変換し、もちろん反復することでした!

(文字列)$モデル;

それだけでした!調べたときにデバッガーが何も返さなかったので、空だと思いました。

あなたの質問はすべてうまくいきました、どうもありがとうございました!

于 2013-01-24T15:43:15.957 に答える