simplexml php无法加载根本原因xml文件中的属性

simplexml php无法加载根本原因xml文件中的属性,php,xml,attributes,simplexml,default-namespace,Php,Xml,Attributes,Simplexml,Default Namespace,这是我之前解决的问题的后续问题,下面是链接: 感谢@RomanPerekhrest解决了这个问题 我有这段php代码,使用simplexml读取xml文件 <?php $xml = simplexml_load_file('../uploads/reports/report.xml'); $hits = $xml->xpath("results/hits/@rule_id"); $ruleIds = array_map(function($v){ // get

这是我之前解决的问题的后续问题,下面是链接:

感谢@RomanPerekhrest解决了这个问题

我有这段php代码,使用simplexml读取xml文件

<?php



    $xml = simplexml_load_file('../uploads/reports/report.xml');

$hits = $xml->xpath("results/hits/@rule_id");
$ruleIds = array_map(function($v){    // getting search path for each needed rule
    return "profile_info/rules/rule[@id='". (string)$v. "']"; 
}, $hits);

foreach ($xml->xpath(implode(" | ", $ruleIds)) as $rule) {
    echo '<div id="name">'. $rule->display_name .'</div>'.
         '<div id="comment">'. $rule->display_comment .'</div>';
}                                           
?>
xpath(“结果/点击数/@rule_id”);
$ruleIds=array_map(函数($v){//获取每个所需规则的搜索路径
返回“profile_info/rules/rule[@id=”(字符串)$v.“]”;
},$hits);
foreach($xml->xpath(内爆(“|“,$ruleIds))作为$rule){
回显“”。$rule->display_name。“”。
“.$rule->display_comment.”;
}                                           
?>
再次感谢@RomanPerekhrest提出这一点

这段代码与我在前面的问题中创建的简化xml文件配合得很好,但当我应用它时,它似乎无法呈现

我已经找到了在我的根元素中有一些导致xml无法加载的xmlns属性的原因。当我手动删除这些属性时,一切正常。(我不会列出整个xml文档,因为它有8500多行) 以下是具有以下属性的根元素:

<report xsi:schemaLocation="http://www.callassoftware.com/namespace/pi4 pi4_results_schema.xsd" xmlns="http://www.callassoftware.com/namespace/pi4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

我需要一种绕过php的方法。由于这些xml文件是由其他软件生成的,并且在这一代中缺少设置,因此我不能简单地创建没有这些属性的xml文件

谢谢

您的XML在根元素处声明了默认名称空间,没有前缀的子元素将隐式继承:

xmlns="http://www.callassoftware.com/namespace/pi4"
要引用默认命名空间中的元素,需要将前缀映射到默认命名空间URI,然后在XPath中使用该前缀:

//register prefix 'd' to reference default namespace URI
$xml->registerXPathNamespace('d', 'http://www.callassoftware.com/namespace/pi4');

//use the prefix to reference elements in the default namespace
$hits = $xml->xpath("d:results/d:hits/@rule_id");
$ruleIds = array_map(function($v){    // getting search path for each needed rule
    return "d:profile_info/d:rules/d:rule[@id='". (string)$v. "']"; 
}, $hits);

地址:
http://www.callassoftware.com/namespace/pi4 pi4_results_schema.xsd
http://www.callassoftware.com/namespace/pi4
无效,返回
未找到
这也是我注意到的,它使我的整个xml无法读取,我真的不知道如何处理这个问题issue@RomanPerekhrest命名空间标识符实际上不必在任何地方解析。它们是URI,只是为了阻止人们使用相同的名字。