【问题标题】:obtain the node value as text with php + xpath使用 php + xpath 以文本形式获取节点值
【发布时间】:2010-03-04 22:55:07
【问题描述】:

如何在 PHP 中使用 xpath 获取 Xml 节点的字符串值? 我 RTM 但有更复杂的情况,使用 foreach 我只想要我的节点文本。 XML:

<ValCurs Date="00.00.0000" name="Official exchange rate">
<Valute ID="47">
  <NumCode>978</NumCode>
  <CharCode>EUR</CharCode>
  <Nominal>1</Nominal>
  <Name>Euro</Name>
  <Value>17.4619</Value>
</Valute>
</ValCurs>

我做什么:

$xmlToday = simplexml_load_file($urlToday);
$EurToday = $xmlToday->xpath("/ValCurs/Valute[@ID='47']/Value");

$EurToday = array(1) { [0]=>  object(SimpleXMLElement)#3 (1)
                         { [0]=>  string(7) "17.4619" } }

我只需要值。作为一个浮点值。

【问题讨论】:

    标签: php xpath


    【解决方案1】:

    SimpleXMLElement::xpath 返回与 XPath 查询匹配的元素数组。

    这意味着如果你只有一个元素,你仍然需要处理一个数组,并提取它的第一个元素:

    var_dump($EurToday[0]);
    


    但这会给你一个SimpleXMLElement 对象:

    object(SimpleXMLElement)[2]
      string '17.4619' (length=7)
    


    要获取它包含的浮点值,您必须将其转换为浮点数——例如,使用floatval

    var_dump(floatval($EurToday[0]));
    


    这让你得到你想要的:

    float 17.4619
    


    作为旁注:您应该检查xpath 方法是否没有返回false (如果出现错误) 或空数组(如果没有与查询匹配),在尝试使用其返回值之前。

    【讨论】:

    • 任何直接在 Xpath 中指定它的方法 à la ../Value/string()?
    • 考虑到手册说(引用)“返回 SimpleXMLElement 对象的数组,如果出错则返回 FALSE”,我认为这是不可能的。
    • De rien :-) (et vous pouvez / tu peux laisser tomber le "monsieur" ^^ ) -- 不客气 :-) (你可以去掉“先生” ^^)
    • D'accord,先生。是的。先生。 :-)
    【解决方案2】:

    XPath Examples, w3schools.com

    查看部分:选择所有价格

    /bookstore/book/price/text()
    

    text() 似乎得到了你正在寻找的东西。 PHP 中的等价物似乎是 savexml() 因此:

    $EurToday = (float) $xmlToday->xpath("/ValCurs/Valute[@ID='47']/Value/savexml()");
    

    【讨论】:

    • +1,你可能没有回答这个问题,但你确实回答了我的问题,呵呵
    猜你喜欢
    • 2015-03-08
    • 2011-08-25
    • 2015-09-28
    • 2014-01-14
    • 1970-01-01
    • 2011-09-16
    • 2011-11-10
    • 2011-09-23
    • 2012-09-17
    相关资源
    最近更新 更多