2016-07-17 2 views
1

그래서,이 해결되었다 내 앞의 질문에 대한 후속 질문은 여기에 그 링크의 수 있습니다 : 해결하기위한 @RomanPerekhrest에 using data from child element to select data in other element using simplexml in php속성은 SimpleXML을의 PHP에 의해로드 할 수 있습니다

감사 이.

나는 나의 XML 파일을 읽어 SimpleXML을을 사용하여 PHP 코드의 조각이

<?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>'; 
}           
?> 

다시이와 주셔서 @RomanPerekhrest에 감사합니다.

이 코드 조각 내 이전의 질문에 내 문제를 설명하기 위해 만들어 내 단순화 된 XML 파일로 잘 작동하지만 내가 그것을 적용 할 때, 렌더링하지 않는 것 같습니다.

내 루트 요소에 내 XML을로드 할 수 없습니다 원인이 일부의 xmlns 속성이 왜, 내가 이유를 발견했습니다. 이러한 특성을 수동으로 제거하면 모든 것이 예상대로 작동합니다. (I하지 않습니다 목록 전체 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 파일을 만들 수는 없습니다.

감사

+0

addreses :'http://www.callassoftware.com/namespace/pi4 pi4_results_schema.xsd'와'에 http : // www.callassoftware.com/공간/pi4'가 잘못 내가 발견 무엇 그' – RomanPerekhrest

+0

을 found'하지 반환 aswel, 내가 –

+0

@RomanPerekhrest 네임 스페이스 식별자가 실제로 어디 해결하지 않아도이 문제를 접근하는 방법을 정말 확실하지 않다, 내 전체 XML 읽기에 실패 만들고있다. 그것들은 같은 이름을 사용하는 사람들을 모두 막을 수있는 방법 인 URI입니다. – IMSoP

답변

3
귀하의 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); 
+0

도와 주셔서 감사합니다. –

관련 문제