【问题标题】:Storing the content of an xml child node based on a parent node's attribute in php根据php中父节点的属性存储xml子节点的内容
【发布时间】:2011-06-16 04:02:23
【问题描述】:

我正在尝试显示从 xml 结果返回的最大图像 url。到目前为止,返回的最大的是 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>

有什么想法吗?

【问题讨论】:

    标签: php xml xpath parent


    【解决方案1】:

    -&gt;image[@height='400'] 是一个直接的 PHP 数组引用。这将被解释为抑制 defined() 常量 (height) 上的错误 (@),并尝试通过赋值 ='400' 设置其值。

    对于您的 xpath 版本,请记住 xpath 查询返回 DOMNodeList,而不是实际的 DOMElement。要从查询结果中获取所需的 URL,您必须遍历节点列表:

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

    【讨论】:

    • 好吧,我还是不能让它工作。你能给我一步一步的分解吗?使用您的代码,我得到“致命错误:调用未定义的方法 SimpleXMLElement::query()”
    • 啊。对于 SimpleXML,它只是 $xml-&gt;xpath(...)。 $xpath->query 用于当你使用 DOM/DOMXpath 时。
    • 我似乎仍然无法让它工作,错误已修复(谢谢)但使用此代码 $nodes = $xml->xpath("/categories/category/items/product /images/image[@height='400']/sourceURL"); foreach($nodes as $node) { $imageURL = $node->nodeValue;我没有得到网址,实际上,如果我回显变量,我什么也得不到。
    • 试试var_dump($nodes),看看是否真的找到了任何节点。
    • query() 会返回结果数组或布尔值 FALSE。如果它出现 null ,则不应该出现。
    【解决方案2】:
    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      相关资源
      最近更新 更多