Хранение содержимого дочернего узла xml на основе атрибута родительского узла в php - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь отобразить самый большой URL-адрес изображения, полученный в результате XML.До сих пор наибольшее возвращаемое значение имеет высоту 400, поэтому я жестко запрограммировал 400 дюймов. Если возможно, я бы хотел выбрать только самое большое в случае, если в будущем я получу результаты, в которых нет изображения высоты 400.

Я попытался

$x = file_get_contents($url);
$xml = simplexml_load_string($x);

$imageURL=$xml->categories->category->items->product->images->image[@height='400']->sourceURL;

, что дает мне "синтаксическая ошибка, неожиданная '=', ожидание ']'".

И я также попытался:

$imageURL= $xml->xpath("/categories/category/items/producct/images/image[@height='400']/sourceURL");

Но получил плохую ссылку.Вот XML:

 <images>
        <image available="true" height="100" width="100">
            <sourceURL>
                Someurl.com
            </sourceURL>
        </image>
        <image available="true" height="200" width="200">
            <sourceURL>
                Someurl.com
            </sourceURL>
        </image>
        <image available="true" height="300" width="300">
            <sourceURL>
                Someurl.com
            </sourceURL>
        </image>
        <image available="true" height="400" width="400">
            <sourceURL>
                Someurl.com
            </sourceURL>
        </image>
        <image available="true" height="399" width="400">
            <sourceURL>
                Someurl.com
            </sourceURL>
        </image>
    </images>

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 09 января 2013
Below code might help...


    $xmlSQLProcedures = new DOMXPath($xmlSQLProcedures);
    $strProcedureName = $xmlSQLProcedures->query("//SQLProcedure[@ID='$sSQLProcedureID']")->item(0)->nodeValue;
    $nodeParameters = $xmlSQLProcedures->query("//SQLProcedure[@ID='$sSQLProcedureID']/Parameters/Parameter");
    $ParamCount = $nodeParameters->length-1;
    for ($i=0;$i<=$ParamCount;$i++) {
        echo $nodeParameters->item($i)->getAttribute("Name").'<br>';
    }


<?xml version="1.0" encoding="UTF-8"?>
<SQLProcedures>
<!--    **********   FOR KEYWORD IN LOCAL LANGUAGE    *************    -->
    <SQLProcedure ID="001070001">
        <Name>P_ManipulateKeywordsInLL</Name>
        <Parameters>
            <Parameter Name="LanguageId"/>
            <Parameter Name="KeywordId"/>
            <Parameter Name="KeywordInLL"/>
            <Parameter Name="ActionFor"/>
            <Parameter Name="KeywordInLLId"/>
            <Parameter Name="Keyword"/>
            <Parameter Name="KeywordList"/>
            <Parameter Name="SessionId"/>
            <Parameter Name="WarehouseId"/>
        </Parameters>
    </SQLProcedure>
</SQLProcedures>
0 голосов
/ 16 июня 2011

->image[@height='400'] является прямой ссылкой на массив PHP.Это будет интерпретировано как ошибка подавления (@) для константы defined() (height) и попытка установить ее значение с помощью присваивания ='400'.

. Для вашей версии xpath запомнитечто запрос xpath возвращает DOMNodeList, а не фактический DOMElement.Чтобы получить нужные URL-адреса из результатов запроса, вам нужно выполнить итерацию по списку узлов:

$nodes = $xpath->query(...) {
foreach($nodes as $node) {
   $url = $node->nodeValue;
}
...