【问题标题】:Get tag content获取标签内容
【发布时间】:2011-04-19 19:06:32
【问题描述】:

我有以下xml结构

<description>
    <category id="HBLMENEURSPALGA" order="83500">Spa. Handball Liga Asobal
    </category>
    AMAYA Sport San Antonio - C.BM.Torrevieja
</description>  

我得到以下代码

水疗中心。手球联赛 Asobal AMAYA Sport 圣安东尼奥 - C.BM.Torrevieja

但我只想要这个:

AMAYA Sport 圣安东尼奥 - C.BM.托雷维耶哈

$teams  =   $game->getElementsByTagName("description");
               foreach ($teams as $team)
               {
                     $info      =   $team->nodeValue;
               }

【问题讨论】:

  • 很抱歉指出这一点,但那不是有效的 XML,任何解析器都会出错并退出。您之后的文本必须位于单独的 中才能有效。您确定这是您使用的确切 XML。
  • @toby... 完全有效的 XML..

标签: php xml dom


【解决方案1】:

您需要指向正确的节点。您指向的这个节点实际上是整个description 节点,而您需要指向包含您想要的字符串的(隐式)文本节点。

解决方案(前提是字符串始终排在最后):

$teams = $xml->getElementsByTagName("description");
foreach ($teams as $team)
{
    $info = $team->lastChild->nodeValue;
    echo "info: $info\n";
}

【讨论】:

    【解决方案2】:

    您需要循环$team 的childNodes 并检查nodeType == XML_TEXT_NODE 是否存在

    foreach ($teams as $team)
      {
        foreach($team->childNodes as $child)
          {
             if ($child->nodeType == XML_TEXT_NODE && trim($child->nodeValue) != '')
               {
                 $info = $child->nodeValue;
                 break;
               }
          }
      }
    

    这是因为文本也是一个节点(因此需要循环子节点),它的 nodeType 值为 XML_TEXT_NODE (3)

    我还在检查 nodeValue 是否为非空,因为节点之间的空白也可以视为 textNodes..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多