2012-06-09 98 views
-1

我想要一個特定的CollageObjectInfo元素的PositionX屬性的值,並且我有一個包含我想要選擇的元素的編號的變量。使用變量來獲取屬性SimpleXML

我想達到的目標是這樣的(當然這個代碼不工作):

$xml = simplexml_load_file("vars.xml"); 
$number = 140; 
$positionx = $xml->CollageObjects->CollageObjectInfo[$number]->attributes()->PositionX; 

的參考來源:

<?xml version="1.0" encoding="utf-8"?> 
<CollageInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" BgType="image" BgImagePath="http://localhost:8080/images/dreamboard/backgrounds/pattern2.jpg" BgColor="0" CanvasWidth="960" CanvasHeight="730" AutoSaveTime="50000" SelectedMemberDreamId="00000000-0000-0000-0000-000000000000"> 
    <CollageObjects> 
    <CollageObjectInfo xsi:type="CollageImageInfo" 
         MemberDreamId="a5d55cc1-8eb2-4e28-9ad9-4b9ea250926d" 
         PositionX="670" PositionY="50" Rotation="0" 
         ScaleX="0.5" ScaleY="0.5" Alpha="1" DropShadow="true" 
         Coords="670,77,887.5,77,887.5,337,670,337" 
         Type="image" 
         DreamboardImageId="00000000-0000-0000-0000-000000000000" 
         ImagePath="http://cubicflow.com/dan/dia/images/dream-1.jpg" 
         Caption="I am flying without taking my shoes off." /> 
    <CollageObjectInfo xsi:type="CollageImageInfo" 
         MemberDreamId="2f7a6c1b-6006-4a5d-b9d8-b653ee7ea4ca" PositionX="82" PositionY="323" Rotation="-40" ScaleX="0.5" ScaleY="0.5" Alpha="1" DropShadow="true" Coords="2,400,219.5,400,219.5,710,2,710" Type="image" DreamboardImageId="00000000-0000-0000-0000-000000000000" ImagePath="http://cubicflow.com/dan/dia/images/dream-2.jpg" Caption="I am continuing to improve physical conditioning." /> 
    <CollageObjectInfo xsi:type="CollageImageInfo" 
         MemberDreamId="7230bb7a-58a6-49d3-bfc7-ed7e4486da85" PositionX="150" PositionY="404" Rotation="0" ScaleX="0.46" ScaleY="0.44" Alpha="1" DropShadow="true" Coords="680.75,381.25,880.85,381.25,880.85,736.75,680.75,736.75" Type="text" DreamboardImageId="00000000-0000-0000-0000-000000000000" ImagePath="" Caption="Lorem ipsum dolor yeeeeeeeahhhhssssss sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." /> 
    </CollageObjects> 
</CollageInfo> 
+0

我們可以看到你的XML嗎? –

+0

自然,這段代碼確實有效:https://eval.in/57664 - 那麼這會導致你的問題在哪裏? – hakre

回答

-2

您可以嘗試使用XPath。

喜歡的東西

$attr = $xml->xpath('CollageObjects/CollageObjectInfo['.$number.']/@PositionX'); 

xpath()總是返回(在錯誤的情況下,或FALSE)數組,所以你可以做這樣的事情

$neededAttr = (string)$attr[0]; 

(當然你檢查錯誤後)

這是example


另一種可能的解決方案是這樣的:

$children = $x->CollageObjects->children(); 
echo $children[$number]->attributes()->PositionX; 

或者,如果你使用PHP> = 5.4

echo $x->CollageObjects->children()[$number]->attributes()->PositionX 

(我沒有PHP 5.4安裝,所以我不能保證代碼的工作,但我沒有理由不這樣做)。

PHP 5.4 Array dereferencing

A注:的XPath從1計數,而PHP從0計數,使用$number爲指標時考慮到這一點。

祝你好運:)

+0

-1:有問題的代碼確實有用,不需要回答,因爲想知道爲什麼你沒有意識到。 https://eval.in/57664 – hakre