PHP和XML:getElementByType

PHP和XML:getElementByType,php,html,xml,Php,Html,Xml,我对php有点陌生,我正在尝试循环遍历我的XML文件,以便提取数据并用HTML显示它。我知道如何显示HTML部分,但对于XML部分该做什么,我有点困惑 下面是我正在尝试做的一个示例文件(您可以将其描绘成一个电影分类列表,其中groupType是流派): 这是一个样本标题 标题1 标题2 标题3 ... 有更多具有不同组类型的主组等 基本上,我将有10+个main组,其中包含许多不同的组,因此我需要一种使用php循环这些组的方法。主要问题是,我需要某种方法来“getElementByType(

我对php有点陌生,我正在尝试循环遍历我的XML文件,以便提取数据并用HTML显示它。我知道如何显示HTML部分,但对于XML部分该做什么,我有点困惑

下面是我正在尝试做的一个示例文件(您可以将其描绘成一个电影分类列表,其中groupType是流派):


这是一个样本标题
标题1
标题2
标题3
... 有更多具有不同组类型的主组等
基本上,我将有10+个main组,其中包含许多不同的组,因此我需要一种使用php循环这些组的方法。主要问题是,我需要某种方法来“getElementByType()”,但这并不存在

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

您可以使用

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

编辑-
$string
将是您的XML。如果需要从文件中加载,可以执行以下操作
$string=file_get_contents('/path/to/your/file')

real simple-->使用PHP的
simplexml
-->实时演示:

$xmlstr='1
这是一个样本标题
标题1
标题2
标题3
';
//创建simplexml对象
$xml=simplexml\u load\u字符串($xmlstr);
//通过所有循环,我们使用xpath查询。。。
foreach($xml->xpath(//groupHeading)作为$gh){
回声($gh),“
”; } //现在使用groupType1的每个组下的标题。。。 foreach($xml->xpath(//group[@type='groupType1']/title)作为$gt1){ echo$gt1,“
”; }
编辑:回显每个groupHeading的标题,如果grouptype=1,则回显子节点的标题: --->请参阅新演示:

foreach($xml->groupHeading作为$gh){
回声($gh),“
”; foreach($gh->xpath(//group[@type='groupType1']/title)作为$gt1){ echo$gt1,“
”; } }
如果我有大约200多个不同的组,您认为使用类来组织会更容易吗?还是更容易循环?不幸的是,PHP DOM省略了getElementsByClassName(),因此它没有真正的帮助。我的示例将搜索所有组,而不考虑maingroup。如果您正试图这样做,那么搜索所有的组可能比执行嵌套循环来查找特定的主组更快。。。如果你想先找到一个主组,只需将标记从一个组更改为另一个主组,并比较类型或其他任何你需要的属性。我需要跟踪组标题,因为它将是一个部分的标题,所以在获取所有组之前只找到它是行不通的。有多个主组,所以我需要指定它们。哦,我没有看到编辑。简单XML似乎是一种可行的方法,因为它更容易将元素分离出来。Thanks@sl133现在看我的编辑,答案的结尾。它应该做你想做的,是吗?
<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
$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);
$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 />';
}
foreach ($xml->groupHeading as $gh) {

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

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

      echo $gt1,'<br />';

   }
}