【问题标题】:Parsing xml file using xpath and xquery使用 xpath 和 xquery 解析 xml 文件
【发布时间】:2010-09-07 06:57:14
【问题描述】:

我有一个 xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<xml>
<settings>
<title>Calendar for September</title>
<subTitle>Calendar for September  Calendar for September</subTitle>
</settings>
<events date="06-09-2010">
<event id="2">
<title>This is My Second Event</title>
<description>This is My Second Event </description>
</event>
<event id="3"><title>This is My Third  Event </title><description>This is My Third  Event This is My Third  Event This is My Third  Event </description></event></events>
</xml>

我正在使用

解析 xml 文件
$xml_str = file_get_contents('xmlfile');
$xml = simplexml_load_string($xml_str);
if(!empty($xml))
{
 $nodes = $xml->xpath('//xml/events/event[@id="'.$id.'"]');
}

它只会给出具有指定id的事件标签的标题和描述。我如何获得日期

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

    试试

    //event[@id="2"]/parent::events/@date
    

    与原始 XPath 一起:

    //event[@id="2"]/parent::events/@date | //event[@id="2"]
    

    【讨论】:

    • 感谢 KennyTM。但它只会给出日期。
    • @THOmas:您可以使用原始 XPath |
    • @THOmas: //event[@id="2"]/parent::events/@date | //event[@id="2"]
    • @KennyTM:两个次要:只要架构是众所周知的,尽量避免启动// 运算符,缩写语法.. 也是众所周知的。所以这可能是:/*/*/event[@id='2']|/*/*/event[@id='2']/../@date。此外,使用“上下文无关”表达式是一种仅在一个方向上选择的好习惯,例如 /*/events[event[@id='2']]/@date
    【解决方案2】:

    找到&lt;event&gt; 元素后,将其用作新xpath 查询的上下文节点,该查询获取ancestor 轴中最近的&lt;events&gt; 元素。

    $id = 2;
    $xml = simplexml_load_file('xmlfile');
    if( !$xml ) {
      echo '!xml doc';
    }
    else if ( !($event=$xml->xpath('events/event[@id="'.$id.'"]')) ) {
      echo '!event[id=...';
    }
    else if ( !($container = $event[0]->xpath('ancestor::events[1]')) ) {
      echo '!events parent';
    }
    else {
      echo $container[0]['date'], ' - ', $event[0]->title, "\n";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多