1

给定的 HTML 文档包含这样的表单:

<form>
    <div controlType="yyy1" xmlTag="zzz1">...</div>
    <div controlType="yyy2" xmlTag="zzz2">...</div>
</form>

我需要收集这些数据:

$div[0]      = array('yyy1', 'zzz1');
$div[1]      = array('yyy2', 'zzz2');

所需的属性对是controlTypexmlTag对于每个div元素。

4

4 回答 4

1

评估这两个 XPath 表达式

/form/div[$k]/@controlType

和:

/form/div[$k]/@xmlTag

填充$div[$k -1]

其中$k必须替换为数字,1, 2, ...,count(/form/div)

有人可能会想将上面的两个表达式组合成一个 XPath 表达式:

/form/div[$k]/@*

但是,允许 XPath 的实现以任何顺序返回属性(XPath 没有定义属性之间的顺序),并且不清楚这两个属性中的哪一个在所选节点中首先出现,哪个在第二个出现。

于 2012-09-04T03:05:09.643 回答
0

如果有帮助,我的两分钱

            var doc = '<form xmltag="xxx"><div controltype="yyy1" xmltag="zzz1">...</div><div controltype="yyy2" xmltag="zzz2">...</div></form>';

        var result = [];

        $(doc).children().each(function () {
            var ctrl = $(this);
            if (ctrl.is('div')) {
                result.push([ctrl.attr('controlType'), ctrl.attr('xmlTag')]);
            }
        });
于 2012-09-04T03:26:58.083 回答
0
@$url = "http://XXX.xom"
$path     = "//div[@class='sb_tlst']//a";
$contents = get_contents($url, $path);
foreach ($contents as $value) 
{ 
    /* do something */
}
于 2012-09-04T03:48:47.417 回答
0

我的最终解决方案基于@dimitre-novatchev 的出色创意提案:

$res             = $xpath->query("//form//div/@xmltag"); // OBS: xmltag not xmlTag
$total_fields    = $res->length;

for ($i = 1; $i <= $total_fields; $i ++ )
{
    $r       = $xpath->query("//form//div[$i]/@xmltag");
    $xmltag  = $r->item(0)->value;

    $r           = $xpath->query("//form//div[$i]/@controltype");
    $controltype = $r->item(0)->value;

    $div[$i - 1] = array(
        'xmltag'         => $xmltag,
        'controltype'    => $controltype
    );
}

输出样本:

array (
  0 => 
  array (
    'xmltag' => 'Case_Number',
    'controltype' => '',
  ),
  1 => 
  array (
    'xmltag' => 'Plaintiff',
    'controltype' => 'RadioButtons',
  ),
  2 => 
  array (
    'xmltag' => 'Plaintiff_Name',
    'controltype' => '',
  ),

美丽的!

于 2012-09-04T05:16:00.583 回答