PHP XPath:如何获取元素内容?

PHP XPath:如何获取元素内容?,php,xml,simplexml,Php,Xml,Simplexml,我需要一些PHP/Xpath帮助。有人能给我一个代码来执行吗 以下是来自AmazonWeb服务的XML片段,与书籍的类别有关(在本例中,书籍分为两类)。我曾尝试遍历这棵树,以获得所需格式的信息,但没有取得多大成功(使用SimpleXMLElement) 我需要的结果是一个嵌套的关联数组,如下所示: [0] - '11079' => 'Politics' - '53' => 'Nonfiction' - '1000' => 'Subjects' - '28

我需要一些PHP/Xpath帮助。有人能给我一个代码来执行吗

以下是来自AmazonWeb服务的XML片段,与书籍的类别有关(在本例中,书籍分为两类)。我曾尝试遍历这棵树,以获得所需格式的信息,但没有取得多大成功(使用SimpleXMLElement)

我需要的结果是一个嵌套的关联数组,如下所示:

[0]
   - '11079' => 'Politics'
   - '53' => 'Nonfiction'
   - '1000' => 'Subjects'
   - '283155' => 'Books'
[1]
   - '11232' => 'Social Sciences'
   - '53' => 'Nonfiction'
   - '1000' => 'Subjects'
   - '283155' => 'Books'
以下是XML:

<BrowseNodes>
    <BrowseNode>
        <BrowseNodeId>11079</BrowseNodeId>
        <Name>Politics</Name>
        <Ancestors>
            <BrowseNode>
                <BrowseNodeId>53</BrowseNodeId>
                <Name>Nonfiction</Name>
                <Ancestors>
                    <BrowseNode>
                        <BrowseNodeId>1000</BrowseNodeId>
                        <Name>Subjects</Name>
                        <IsCategoryRoot>1</IsCategoryRoot>
                        <Ancestors>
                            <BrowseNode>
                                <BrowseNodeId>283155</BrowseNodeId>
                                <Name>Books</Name>
                            </BrowseNode>
                        </Ancestors>
                    </BrowseNode>
                </Ancestors>
            </BrowseNode>
        </Ancestors>
    </BrowseNode>
    <BrowseNode>
        <BrowseNodeId>11232</BrowseNodeId>
        <Name>Social Sciences</Name>
        <Ancestors>
            <BrowseNode>
                <BrowseNodeId>53</BrowseNodeId>
                <Name>Nonfiction</Name>
                <Ancestors>
                    <BrowseNode>
                        <BrowseNodeId>1000</BrowseNodeId>
                        <Name>Subjects</Name>
                        <IsCategoryRoot>1</IsCategoryRoot>
                        <Ancestors>
                            <BrowseNode>
                                <BrowseNodeId>283155</BrowseNodeId>
                                <Name>Books</Name>
                            </BrowseNode>
                        </Ancestors>
                    </BrowseNode>
                </Ancestors>
            </BrowseNode>
        </Ancestors>
    </BrowseNode>
</BrowseNodes>

11079
政治
53
纪实
1000
学科
1.
283155
书
11232
社会科学
53
纪实
1000
学科
1.
283155
书
你可以用艰难的方式来完成

你可以看到

找到了答案:

$categories = array();
$categories_count = count($simple_xml_emlement->xpath('//BrowseNodes/BrowseNode'));
for($i = 1; $i <= $categories_count; $i++)
{
   $category = array();
   $category_names = $simple_xml_emlement->xpath("//BrowseNodes/BrowseNode[$i]//Name");
   foreach($category_names as $category_name)
   {
      $category_id = $category_name->xpath('preceding-sibling::*');
      $category[(int)$category_id[0]] = (string) $category_name;
   }
   $categories[] = $category;
}
$categories=array();
$categories\u count=count($simple\u xml\u emelement->xpath('//BrowseNodes/BrowseNode');
对于($i=1;$i xpath(“//BrowseNodes/BrowseNode[$i]//Name”);
foreach($category\u name作为$category\u name)
{
$category\u id=$category\u name->xpath('previous-sibling::*');
$category[(int)$category\u id[0]]=(string)$category\u name;
}
$categories[]=$categories;
}

代码假设类别有特定的深度?事实并非如此。@StackOverdownEWBIE:那么可能的深度/差异是什么?我不知道Amazon WS-XML规范。你在谈论反序列化或类填充(本例中为数组),但你在关于XPath的问题上什么都没说。。。
$categories = array();
$categories_count = count($simple_xml_emlement->xpath('//BrowseNodes/BrowseNode'));
for($i = 1; $i <= $categories_count; $i++)
{
   $category = array();
   $category_names = $simple_xml_emlement->xpath("//BrowseNodes/BrowseNode[$i]//Name");
   foreach($category_names as $category_name)
   {
      $category_id = $category_name->xpath('preceding-sibling::*');
      $category[(int)$category_id[0]] = (string) $category_name;
   }
   $categories[] = $category;
}