1

我发现自己深入研究了 xml 提要,除了几个数组名称之外,它们几乎是相同的提要。

理想情况下,我想制作一种我可以调用的函数,但我不知道如何处理这种数据

//DRILLING DOWN TO THE PRICE ATTRIBUTE FOR EACH FEED & MAKING IT A WORKING VAR
  $wh_odds = $wh_xml->response->will->class->type->market->participant;
  $wh_odds_attrib = $wh_odds->attributes();
  $wh_odds_attrib['odds'];


  $lad_odds = $lad_xml->response->lad->class->type->market->participant;
  $lad_odds_attrib = $lad_odds->attributes();
  $lad_odds_attrib['odds'];

如您所见,它们本质上非常相似,但我不太确定如何简化设置工作变量的过程,而无需每次编写 3 行。

4

2 回答 2

1

你可以这样做:

 function getAttrib ($xmlObj, $attrName) {
      $wh_odds = $xmlObj->response->$attrName->class->type->market->participant;
      $wh_odds_attrib = $wh_odds->attributes();
      return $wh_odds_attrib['odds'];
}

getAttrib ($wh_xml, "will");

希望有帮助。

于 2013-02-15T00:25:50.863 回答
1

您可能正在寻找的功能称为SimpleXMLElement::xpath().

XPath 是它自己的一种语言,旨在从 XML 文件中挑选内容。在您的情况下,获取odds所有这些元素的属性的 xpath 表达式是:

response/*/class/type/market/participant/@odds

您还可以将 替换*为具体的元素名称,或者允许有多个名称,等等。

$odds = $lad_xml->xpath('response/*/class/type/market/participant/@odds');

与您的代码不同,这具有数组内的所有属性元素(变量内有属性的父元素)。一个示例结果(考虑两个这样的元素)将是:

Array
(
    [0] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [odds] => a
                )

        )

    [1] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [odds] => a
                )

        )

)

您也可以轻松地将其转换为字符串:

$odds_strings = array_map('strval', $odds);

print_r($odds_strings);

Array
(
    [0] => a
    [1] => a
)

如果您说要获取所有participant元素的odds属性,Xpath 特别有用:

//participant/@odds

您不需要显式指定每个父元素名称。

我希望这是有帮助的。

于 2013-02-15T14:23:31.453 回答