2012-04-20 12 views
5

私はロードXMLは、いくつかの要素の属性

simplexml_load_file($filePath,'SimpleXMLElement', LIBXML_NOCDATA); 

を使用してXMLファイルをロードし、XMLのほとんどのためにしているが、それが正常に動作して戻りません。しかし、XMLの要素の中には、属性が@attributes配列に変換されず、代わりに出力から欠落しているものがあります。ここではサンプルです:

<UI_DEFINITION> 
<EDIT_PERMISSION>testPermission</EDIT_PERMISSION> 
<DEFAULT_VALUES> 
    <display>hidden</display> 
    <css_class>generic_css_class</css_class> 
    <title>{tag}</title> 
    <type>string</type> 
    <wrapper_format>{value}</wrapper_format> 
    <full_path>false</full_path> 
    <mandatory>false</mandatory> 
    <edit_permission>testPermission</edit_permission> 
    <max_length>0</max_length> 
</DEFAULT_VALUES> 
<LOOKUPS> 
    <DB_LOOKUP name="test3"> 
     <VIEW>???</VIEW> 
     <ID_FIELD>???</ID_FIELD> 
     <DESCR_FIELD>???</DESCR_FIELD> 
     <ORDER>??? asc</ORDER> 
    </DB_LOOKUP> 
    <DB_LOOKUP name="test1"> 
     <VIEW>???</VIEW> 
     <ID_FIELD>???</ID_FIELD> 
     <DESCR_FIELD>???</DESCR_FIELD> 
     <ORDER>??? asc</ORDER> 
    </DB_LOOKUP> 
</LOOKUPS> 
<AREA internal_name="main_details" title="" display="show"> 
    <FIELD lookup="test1" title="Title">Title</FIELD> 
    <FIELD title="Name">Given_Name</FIELD> 
    <FIELD title="Mid. Name(s)">Middle_Names</FIELD> 
    <FIELD title="Family Name">Family_Name</FIELD> 
    <FIELD title="Gender">Gender</FIELD> 
    <FIELD title="Born" type="date">Date_of_Birth</FIELD> 
    <FIELD max_length="20" title="ID">Unique_Identifier</FIELD> 
</AREA> 

これがしますprint_r(私は問題だビットで改行を追加しました)から以下の出力できます:あなたが見ることができるように

SimpleXMLElement Object ([UI_DEFINITION] => SimpleXMLElement Object ([EDIT_PERMISSION] => testPermission [DEFAULT_VALUES] => SimpleXMLElement Object ([display] => hidden [css_class] => generic_css_class [title] => {tag} [type] => string [wrapper_format] => {value} [full_path] => false [mandatory] => false [edit_permission] => testPermission [max_length] => 0) [LOOKUPS] => SimpleXMLElement Object ([DB_LOOKUP] => Array ([0] => SimpleXMLElement Object ([@attributes] => Array ([name] => test3) [VIEW] => ??? [ID_FIELD] => ??? [DESCR_FIELD] => ??? [ORDER] => ??? asc) [1] => SimpleXMLElement Object ([@attributes] => Array ([name] => test1) [VIEW] => ??? [ID_FIELD] => ??? [DESCR_FIELD] => ??? [ORDER] => ??? asc))) 
[AREA] => SimpleXMLElement Object ([@attributes] => Array ([internal_name] => main_details [title] => [display] => show) [FIELD] => Array ([0] => Title [1] => Given_Name [2] => Middle_Names [3] => Family_Name [4] => Gender [5] => Date_of_Birth [6] => Unique_Identifier)))) 

を、属性配列は、ほとんどの要素に正しく追加されますが、FIELD要素には正しく追加されません。私はそれらの名前を変更しようとしましたが、それは違いを生むようには見えませんでした。

EDIT: FIELDタグでFIELDタグを囲んでみましたが、これも役に立たないと付け加えます。

EDIT:

私は非常XMLを単純化してきたが、それはまだアニー属性を返しません:

<UI_DEFINITION> 
          <FIELD lookup="test1" title="Title">Title</FIELD> 
        </UI_DEFINITION> 

は生成します。

SimpleXMLElement Object ([UI_DEFINITION] => SimpleXMLElement Object ([FIELD] => Title)) 
+1

私は答えを見つけましたが、7時間は自己回答できません。問題は、SimpleXMLでは同じ要素に属性とテキストを使用できないということです。私は可能な限り完全な回答を投稿します。 – alitheg

答えて

4

申し訳ありませんが、この質問に戻って答えるのはとても時間がかかります!

MrCodeが示唆しているように、属性はアクセス可能なでした。問題は、SimpleXMLオブジェクトを別の形式にシリアライズしたときの問題です。 whileオブジェクトでprintrまたはjson_convertを使用すると、報告されたケースでは属性が使用できなくなりました。私は印刷用のコードベースの回避策を見つけるために、このに十分行くか、問題のある場合を含むこれらのオブジェクトを変換しませんでした

、私は単純にXMLデータの一部として、その周りに働いた:

<UI_DEFINITION> 
     <FIELD lookup="test1" title="Title"><VALUEPATH>Title</VALUEPATH></FIELD> 
</UI_DEFINITION> 

この余分なレベルを階層に追加すると、属性は最上位に保持され、テキスト値はサブレベルで正しく使用できます。

8

は属性がために、アクセスできます。例:

$obj = simplexml_load_string($xml); 

foreach($obj->AREA->FIELD as $field) 
{ 
    echo $field->attributes()->title . '<br />'; 
} 

print_r()は、SimpleXMLで完全な構造を表示するとは限りませんが、その属性が使用されています。

+0

あなたの答えをありがとう。私が質問に追加したコメントを見てください。しかし、あなたが提供したコードを試してみると、私は問題の詳細を知ることができました: – alitheg

+0

改行の代わりに投稿を入力してください。だから、forループを使って、あなたが提案したように、私は属性を得ることができました。私が追加していなかったのは、私のページの行の下に、結果として得られるオブジェクトにjson_convertを使用しているということでした。私が知覚している限界は、印刷やシリアル化には存在しますが、それが理にかなっていれば、PHPでの直接のやりとりではないようです。 – alitheg

+0

もしあなたが問題なければ、私はむしろ問題をより明確に示しているので、私は投稿する答えを受け入れるでしょうが、これを追加します。十分な評判がないので、私はあなたにupvoteできません。ありがとう! – alitheg

関連する問題