【问题标题】:PHP using XPath to find valued tagsPHP 使用 XPath 查找有价值的标签
【发布时间】:2014-02-20 02:05:46
【问题描述】:

如何使用 XPath 通过搜索 标记来获取 的值?

我一直在使用以下 PHP/XPath 代码:

$aan = "Company A";
$ContRow = "/results/Accounts/row['FL val=\"Account Name\"'='".$aan."']";
foreach ($Cxml->xpath($ContRow) as $Crow)
  {
    $ao = $Crow->FL[1];
    echo $ao."<br />";
  }

和 XML 代码:

<result>
    <Accounts>
        <row no="1">
            <FL val="Account Name">
                <![CDATA[Company A]]>
            </FL>
            <FL val="Account Owner">
                <![CDATA[Owner's Name]]>
            </FL>
        </row>
    </Accounts>
</result>

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

    以下表达式将查找满足具有包含"Company A"&lt;FL val="Account Name"&gt; 后代的每个row,然后选择其中的&lt;FL val="Account Owner"&gt; 元素:

    /result/Accounts/row[contains(FL[@val="Account Name"], "Company A")]/FL[@val="Account Owner"]
    

    这个表达式也应该这样做:

    /result/Accounts/row/FL[@val="Account Name" and contains(.,"Company A")]/following-sibling::FL
    

    示例

    $doc = new DOMDocument;
    $doc->loadXml($xml);
    
    $xpath = new DOMXPath($doc);
    
    $res = $xpath->query('/result/Accounts/row[contains(FL[@val="Account Name"], "Company A")]/FL[@val="Account Owner"]');
    
    foreach ($res as $node) {
            echo $node->nodeValue;
    }
    

    【讨论】:

    • 我已经实现了代码,但仍然无法正常工作。 不是 的后代,它是兄弟。但他们都坐在同一个 标签
    • @JaceG 你能分享一下你目前写的代码吗?
    • 抱歉耽搁了..我仔细检查了一下,发现输入时打错了。但我修复了它,它工作得很好:)除了......我有269 标签,而 XML 文件的长度刚刚超过 5000 行。我无法通过第 391 行,因为它有一个错误,显示“PHP 致命错误:/home/public_html/acct/xpath.php 在第 134 行中超出了 30 秒的最大执行时间”。任何想法如何解决这个问题?这是我整个项目完成之前要做的最后一件事!
    • @JaceG 你确定是 XPath 代码本身导致了它吗?它可能完全是另外一回事。
    • 用谷歌搜索了错误并找到了解决方案 - put set_time_limit(0);在我的 PHP 脚本的顶部。所有排序和项目完成!谢谢杰克:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2015-02-25
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    相关资源
    最近更新 更多