2014-03-13 61 views
0

我有一個xml文件xml,我需要解析它。我想要做的是根據以前的輸入獲取標記腳本的最後位置。如何在xpath查詢中指定要匹配的文本的索引

我以前的投入將是標籤腳本的第二個位置(比如說 - 網絡安全,sdnSTC)

所以我怎麼能指定的文本索引在XQuery匹配。

,我現在使用的是編碼 -

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

    ?> 

在這裏這個$ QueryResult中我怎麼可以指定$變量的指標爲2?

+0

你想要什麼?在'script'元素中匹配文本的子字符串?在第二個'/'之後匹配? – nwellnhof

+0

@nwellnhof - 我想在腳本標記中匹配$ variable的值,並且我想在查詢中指定$ variable應該出現在腳本標記的第二個位置。 – Learning

+0

但是「第二位」是什麼意思?第二個字符後?在第二個'/'之後? – nwellnhof

回答

0

看起來「第二位置」是指script元素中路徑的第三個分量。由於PHP僅限於XPath 1.0,我認爲簡單地提取所有testcase元素並查看它們是否與PHP代碼匹配(例如使用explode)會更容易。但你也可以使用XPath表達式與substring-after功能:

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

另外請注意,你似乎插入一個未經檢查的HTTP POST參數到您的XPath表達式。這是一個類似於SQL注入的安全問題。

+0

嘿它工作! 我唯一擔心的是如何在輸出中獲取測試用例名稱(以腳本標記中的.tcl結尾)? – Learning