以下是我正在使用的xml的片段:
客户要求我们添加过滤哪种类型的"新闻文章"显示在特定页面上。他们在另一个网站上创建这些文章,他们现在可以在每个文章中分配一个或多个类别。我们通过php和xml加载文章。
我收到的错误是:
在...
中调用null成员函数getElementsByTagName()
以下是我正在使用的2012年代码:
$item = $dom_object->getElementsByTagName("Releases");
foreach( $item as $value )
{
$Release = $value->getElementsByTagName("Release");
foreach($Release as $ind_Release){
$Title = $ind_Release->getElementsByTagName("Title");
$PublishDateUtc = $ind_Release->getAttribute('PublishDateUtc');
$DetailUrl = $ind_Release->getAttribute('DetailUrl');
$parts = explode('/', $DetailUrl);
$last = end($parts);
我正试图横向于类别代码,并使用:
设置变量$newsCategory = $ind_Release->getElementsByTagName("Categories")->item(0)->getElementsByTagName("Category")->item(0)->getElementsByTagName("Code")->item(0)->nodeValue;
这会加载当前2018篇文章,其中包含被回应的类别slug,因为它们有一个已分配的类别,但它无法加载2017年,2016年等等,我相信,因为它们未在XML中分配类别,这打破了一些东西。
A news article without a category appears with an empty categories node within XML
我知道我正在使用getElementsByTagName,并且因为第一个类别节点之外没有元素,所以它会中断。
在尝试将其设置为变量并打破它之前,是否有办法检查确实存在类别>类别>代码[CDATA]的路径?
如果这令人困惑,我道歉,我不是PHP专家,可以使用我能得到的所有帮助。是否有更好的方法来横向于所需的节点?
感谢。
答案 0 :(得分:0)
您需要使用XPath。如果您使用的是DOMDocument,则可以通过DOMXpath完成。
您当前的方法使用链接,如果链接的特定关键点没有返回以下方法所依赖的内容,则链接问题会被破坏。因此你的错误。
相反,请从头开始检查整个路径:
$domxp = new DOMXpath($dom_object);
$node = $domxp->query('/Categories[1]/Category[1]/Code[1]');
if (count($node)) {
//found - do something
}