2016-12-04 5 views
-1

にname属性でのXMLノード値を取得します...私のxmlです。ここPHP

<student> 
    <id>ah6d</id> 
    <str name="filename">abc</str> 
    <str name="format">doc</str> 
    <str name="author">John</str> 
    <int name="age">25</int> 
    <int name="point">4</int> 
    </student> 

    <student> 
    <id>fdsf</id> 
    <str name="filename">efg</str> 
    <str name="format">doc</str> 
    <str name="author">Mary</str> 
    <int name="age">23</int> 
    <int name="point">3</int> 
    </student> 

を私はmysqlの「学生」テーブルに値を入れたいと思います。助けてください。私はSimpleXMlの仕組みを知らない。

私が試した...:

$lmx = file_get_contents("students.xml"); 
    $xml = simplexml_load_string($lmx); 


foreach($xml as $student) { 
$id=$student->id ; 
$filename=(string) @$xml->xpath('//student/str[@name="filename"]')[0]; 
$author=(string) @$xml->xpath('//student/str[@name="author"]')[0]; 
$age=(string) @$xml->xpath('//student/int[@name="age"]')[0]; 

echo $id ."<br>"; 
echo $filename ."<br>"; 
echo $author ."<br>"; 
echo $age ."<br>"; 

} 

が、それは "未定義のオフセット:0" に低下

+1

あなたは何か/検索何かを試してみましたか? – Dekel

+0

はい、私はしました。それは私がここにいる理由です。 : – ktdfghj

+0

質問をしようとしたときにコードを追加してください – Dekel

答えて

0

をあなたは持っている問題は、あなたのXMLファイルが有効ではないということです。 XMLは1つのルート要素にラップする必要があります。ここで

は一例です:

ah6d<br> 
abc<br> 
John<br> 
25<br> 
<br> 
<br> 
fdsf<br> 
abc<br> 
John<br> 
25<br> 
<br> 
<br> 

コンテンツ君場合:私はここで、出力がされます<xml>...</xml>

でコンテンツ全体を包ん

$lmx = <<<END 
<xml> 
<student> 
    <id>ah6d</id> 
    <str name="filename">abc</str> 
    <str name="format">doc</str> 
    <str name="author">John</str> 
    <int name="age">25</int> 
    <int name="point">4</int> 
</student> 
<student> 
    <id>fdsf</id> 
    <str name="filename">efg</str> 
    <str name="format">doc</str> 
    <str name="author">Mary</str> 
    <int name="age">23</int> 
    <int name="point">3</int> 
</student> 
</xml> 
END; 
$xml = simplexml_load_string($lmx); 


foreach($xml as $student) { 
    $id = $student->id ; 
    $filename = (string) $xml->xpath('//student/str[@name="filename"]')[0]; 
    $author = (string) $xml->xpath('//student/str[@name="author"]')[0]; 
    $age = (string) $xml->xpath('//student/int[@name="age"]')[0]; 

    echo $id ."<br>\n"; 
    echo $filename ."<br>\n"; 
    echo $author ."<br>\n"; 
    echo $age ."<br>\n"; 

    echo "<br>\n<br>\n"; 
} 

注意getはこの正確な構造になっています(それを制御することはできません)。内容を確認して、文字列にroot xml要素を追加します。ここで

あなたは文字列を折り返すことができる方法の例です:

$lmx = "<xml>" . file_get_contents("students.xml") . "</xml>"; 
+0

ありがとうございます!なぜアウトプットプットに最初の生徒データが2回あるのですか? ??。。ループが間違っているか、なぜ – ktdfghj

+0

私は「最初の生徒は2回のデータを持っている出力」あなたは何を意味するかわからないことを、私はそれが一度だけ見 – Dekel

+0

あなたはそれを投稿: は
ABC
ジョンをah6d


fdsf
ABC
ジョン


その同じ。 – ktdfghj

関連する問題