PHP使用XPath查找有价值的标签

如何使用XPath获取&lt; FL val =“帐户所有者”&gt;的值 通过搜索&lt; FL val =“帐户名称”&gt; 我一直在使用以下PHP / XPath代码:</ p>

  $ aan =“Company A”; 
$ ContRow =“/ results / Accounts / row ['FL val = \”Account Name \“'='”。$ aan。“']”;
foreach($ Cxml-&gt; xpath($ ContRow)as $ Crow)

{
$ ao = $ Crow-&gt; FL [1];
echo $ ao。“&lt; br /&gt;”;
}
</ code> </ pre>

和XML代码:</ p>

 &lt; result&gt; 
&lt; Accounts&gt;
&lt; row no =“1”&gt;
&lt; FL val =“帐户名称”&gt;
&lt;![CDATA [公司A]]&gt;
&lt; / FL&gt;
&lt; FL val =“帐户所有者”&gt;
&lt;![CDATA [所有者的 名称]]&gt;
&lt; / FL&gt;
&lt; / row&gt;
&lt; / Accounts&gt;
&lt; / result&gt;
</ code> </ pre>
</ div>

展开原文

原文

How can I use XPath to get the value of <FL val="Account Owner"> by searching for the <FL val="Account Name"> tag?

I've been using the following PHP / XPath code:

$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 />";
  }

and the XML code:

<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>

1个回答



以下表达式将找到满足&lt; FL val =“帐户的每个行</ code> 命名包含“Company A”</ code>的“&gt; </ code>后代,然后在里面选择&lt; FL val =”Account Owner“&gt; </ code>元素:</ p >

  / result / Accounts / row [contains(FL [@ val =“Account Name”],“Company A”)] / FL [  @ val =“帐户所有者”] 
</ code> </ pre>

此表达式也应该这样做:</ p>

  / result / Accounts / row / FL [@ val =”Account Name“并包含(。,”Company A“)] / following-sibling :: FL 
</ code> </ pre>

示例</ strong> </ p>

  $ doc = new DOMDocument; 
$ doc-&gt; loadXml($ xml);

$ xpath = new DOMXPath($ doc);

$ res = $ xpath-&gt; query('/ result / Accounts / row [contains(FL [@ val =“Account Name”],“Company A “)] / FL [@ val =”帐户所有者“]');

foreach($ res as $ node){
echo $ node-&gt; nodeValue;
}
</ code> </ pre>
</ div>

展开原文

原文

The following expression will find every row that satisfies having an <FL val="Account Name"> descendant that contains "Company A" and then selects the <FL val="Account Owner"> element inside:

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

This expression should also do it:

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

Example

$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;
}

duannv2081
duannv2081 谷歌搜索了错误并找到了解决方案 - put set_time_limit(0); 在我的PHP脚本的顶部。 所有排序和项目完成! 谢谢杰克:)
6 年多之前 回复
dougou8458
dougou8458 你有没有确定它是导致它的XPath代码本身? 它可能完全是另一回事。
6 年多之前 回复
dsfsd43523
dsfsd43523 抱歉延迟..我已经仔细检查了一下,发现我把它插入时输入了错字。但是我修复了它并且它完美地运行了:)除了......我有269个<row>标签和XML 文件长度超过5000行。 我无法越过第391行,因为它有一个错误,上面写着“PHP致命错误:第134行/home/<user>public_html/acct/xpath.php超过30秒的最大执行时间”。 任何想法如何解决这个问题? 这是我整个项目完成之前要做的最后一件事!
6 年多之前 回复
doudandui1592
doudandui1592 你能分享到目前为止你写的代码吗?
6 年多之前 回复
dongying7667
dongying7667 我已经实现了代码,但仍无法使其正常工作。 <FL val =“帐户所有者”>不是<FL val =“帐户名称”>的后代,它是兄弟姐妹。 但它们都位于相同的<row>标签中
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐