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