2014-03-13 2 views
0

나는 x30 파일 xml을 파싱해야합니다. 내가하고 싶은 것은 이전 입력을 기반으로 태그 스크립트의 마지막 위치를 얻는 것입니다.xpath 쿼리에서 일치시킬 텍스트의 인덱스를 지정하는 방법

내 이전 입력 태그 스크립트의 두 번째 위치에있을 것입니다 (예를 들어 - 네트워크 보안, sdnSTC)

그래서 텍스트의 인덱스가 XQuery를에 일치를 지정하는 방법에 대해 설명합니다.

내가 지금 사용하고있는 코드 -

나는 $ 변수의 인덱스가 2 지정할 수있는 방법을 여기 $ queryResult에서
<?php 

    $variable=$_POST['module']; 
    $xmldoc = new DOMDocument(); 
      $xmldoc->load('info.xml'); 

      $xpathvar = new Domxpath($xmldoc); 

    $queryResult = $xpathvar->query("testcase[contains(script,'$variable')]"); 

      foreach($queryResult as $result) 
      { 
        echo $result->textContent; 
      } 

    ?> 

?

+0

정확히 무엇을 원하십니까? 'script' 요소에서 텍스트의 부분 문자열을 일치 시키시겠습니까? 두 번째'/'이후에 일치합니까? – nwellnhof

+0

@nwellnhof - 스크립트 태그에서 $ variable의 값을 일치시키고 싶습니다. $ 변수가 스크립트 태그의 두 번째 위치에 나타나야한다는 쿼리를 지정하고 싶습니다. – Learning

+0

하지만 "2 위"란 무엇을 의미합니까? 두 번째 등장 인물? 두 번째'/'뒤에? – nwellnhof

답변

0

"두 번째 위치"는 script 요소의 경로 세 번째 구성 요소를 의미하는 것으로 보입니다. PHP에서는 XPath 1.0으로 제한되어 있으므로, 모든 testcase 요소를 추출하고 PHP 코드와 일치하는지 확인하는 것이 더 쉽다고 생각합니다 (예 : explode 사용). 그러나 당신은 또한 substring-after 기능을 XPath 식을 사용할 수 있습니다

testcase[ 
    substring-after(
     substring-after(script, '/'), 
     '/' 
    ) = '$variable' or 
    substring-before(
     substring-after(
      substring-after(script, '/'), 
      '/' 
     ), 
     '/' 
    ) = '$variable' 
] 

또한 당신이 당신의 XPath 식으로 검사되지 않은 HTTP의 POST 매개 변수를 삽입하는 것 있습니다. 이는 SQL 주입과 비슷한 보안 문제입니다.

+0

헤이 작동! 내 출력에서 ​​테스트 케이스 이름 (스크립트 태그에서 .tcl로 끝남)을 가져 오는 방법 만 걱정됩니까? – Learning

관련 문제