Php Xpath查询的输出

Php Xpath查询的输出,php,xml,xpath,xml-parsing,Php,Xml,Xpath,Xml Parsing,首先,我想问Xpath查询的输出格式是什么 对于我来说,当我查看输出的源代码时 实际产量- 示例xml- 我的php代码- <?php $variable=$_POST['module']; $xmldoc = new DOMDocument(); $xmldoc->load('info.xml'); $xpathvar = new Domxpath($xmldoc); $queryResult = $xpathvar->

首先,我想问Xpath查询的输出格式是什么

对于我来说,当我查看输出的源代码时

实际产量-

示例xml-

我的php代码-

<?php

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

        $xpathvar = new Domxpath($xmldoc);

        $queryResult = $xpathvar->query("testcase[substring-after(
        substring-after(script, '/'),
        '/'
    ) = '$variable' or
    substring-before(
        substring-after(
            substring-after(script, '/'),
            '/'
        ),
        '/'
    ) = '$variable']"); 

foreach($queryResult as $var)
        {
                echo $var->textContent;
                echo "\n";
        }

?>
load('info.xml');
$xpathvar=newdomxpath($xmldoc);
$queryResult=$xpathvar->query(“testcase[子字符串后(
(脚本“/”)后面的子字符串,
'/'
)='$variable'或
前子串(
子串后(
(脚本“/”)后面的子字符串,
'/'
),
'/'
)='$variable']'';
foreach($queryResult作为$var)
{
echo$var->textContent;
回音“\n”;
}
?>
我想要的是得到以.tcl结尾的字符串,而不是完整的内容


请帮忙

首先,您只查找
testcase
元素节点,textcase节点的实际路径是
/testcaseInfo/testcase
,可以针对文档中的任何testcase元素进行优化:

//testcase

接下来要验证元素是否以字符串结尾,请复制字符串的该部分并进行比较

//测试用例[
子串(
剧本
字符串长度(脚本)-字符串长度('.tcl')+1
)='.tcl'
]

这将返回testcase元素节点,现在您可以使用细节表达式获取每个testcase的数据:

例如:

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

$expression = "
  //testcase[
    substring(
      script, 
      string-length(script) - string-length('$module') + 1
    ) = '$module'
  ]
";

// iterate test test cases and get name/script strings contents
foreach ($xpath->evaluate($expression) as $testCase) {
  var_dump(
    $xpath->evaluate('string(name)', $testCase),
    basename($xpath->evaluate('string(script)', $testCase))
  );
}     
输出:


首先,我想提取脚本标记中与$variable内容匹配的所有测试用例。在输出之后,我想获取以.tcl2ndly结尾的字符串,我只想在输出中包含802dot1xradasgevlanid.tcl、802dot1xradasgevlaname.tcl!不是完整的脚本标记。我为语义命名了变量$module。在PHP中获取最后一部分会更容易,在脚本文件名上使用basename();此变量包含用户提供的输入,该输入包含主模块名称。在这之后,我假设获取所有这些testcase内容,其中$variable作为出现在第二位置的字符串。从上一个查询中获取的测试用例中,我想得到脚本标记中以.tcl结尾的测试用例名称。您的问题是“我想得到以.tcl结尾的字符串”-这就是脚本元素。我修改了答案以获取testcase元素,迭代它们并获取每个元素的详细数据。
string(59) "802.1x_2.52_RADIUS_Accounting_AVP_contains_client_static_IP"
string(31) "802dot1xRadAccAVPClntStatIp.tcl"
string(27) "802.1x_1.02_Basic_User_Mode"
string(25) "802dot1xBasicUserMode.tcl"
string(44) "802.1x_2.47_RADIUS_Accounting_Enable_Disable"
string(34) "802dot1xRadiusAccEnableDisable.tcl"
string(31) "802.1x_2.14_RADIUS_Assigned_CoS"
string(29) "802dot1xRadiusAssignedCos.tcl"
...