1

我对 php 有点陌生,我正在尝试遍历我的 XML 文件以提取数据并以 HTML 格式显示。我知道如何显示到 HTML 部分,但我对如何处理 XML 部分有点困惑。

这是我正在尝试做的示例文件(您可以将其想象为电影的分类列表,其中 groupType 将是流派):

<mainGroup>

    <groupHeading type="heading">This is a sample heading</groupHeading>
    <group type="groupType1">
      <title>Title1</title>
      <date when="0001"></date>
    </group>

    <group type="groupType1">
      <title>Title2</title>
      <date when="0002"></date>
    </group>

    <group type="groupType2">
      <title>Title3</title>
      <date when="0003"></date>
    </group>

</mainGroup>
... There are more mainGroups with differet group types etc

基本上,我将有 10 多个 mainGroups,其中包含许多不同的组,所以我需要一种方法来使用 php 遍历这些组。主要问题是我需要以某种方式“getElementBy Type()”,但这并不存在。

如果有什么令人困惑的地方,我可以详细说明,我仍然是 php 的新手,所以我希望我能做到这一点。

4

2 回答 2

1

你可以使用PHP DOM

如果您想搜索特定类型的组然后获取结果,您可以执行以下操作:

编辑 -$string将是您的 XML。如果您需要从文件中加载它,您可以这样做 $string = file_get_contents('/path/to/your/file');

$dom = new DOMDocument;
$dom->loadXML($string);

$searchtype = "groupType1";
$results = array();

$groups = $dom->getElementsByTagName('group');
foreach( $groups as $g ) { 
    if( $g->getAttribute('type') == $searchtype ) { 
        $results[] = array(
            'title' =>$g->getElementsByTagName('title')->item(0)->nodeValue,
            'date'  =>$g->getElementsByTagName('date')->item(0)->getAttribute('when')
            );  
    }   
}

print_r($results);
于 2013-03-16T02:06:02.610 回答
1

真正简单 --> 使用 PHP 的simplexml ---> 现场演示:http ://codepad.viper-7.com/i4MRGI

$xmlstr = '<mainGroup>
<groupHeading type="heading">This is a sample heading</groupHeading>
    <group type="groupType1">
        <title>Title1</title>
        <date when="0001"></date>
    </group>
    <group type="groupType1">
        <title>Title2</title>
        <date when="0002"></date>
    </group>
    <group type="groupType2">
        <title>Title3</title>
        <date when="0003"></date>
    </group>
</mainGroup>';

// create simplexml object
$xml=simplexml_load_string($xmlstr);

// loop through all <groupheading>, we use an xpath-query...
foreach ($xml->xpath("//groupHeading") as $gh) {

    echo($gh),'<br />';

} 

// now the titles under every group with groupType1...

foreach ($xml->xpath("//group[@type='groupType1']/title") as $gt1) {

echo $gt1,'<br />';
}

编辑:每个 groupHeading 的回显标题,如果 grouptype=1,则子节点的标题:---> 参见新演示:http ://codepad.viper-7.com/eMuyr5

foreach ($xml->groupHeading as $gh) {

    echo($gh),'<br />';

    foreach ($gh->xpath("//group[@type='groupType1']/title") as $gt1) {

      echo $gt1,'<br />';

   }
} 
于 2013-03-16T02:13:00.797 回答