我正在努力扩展我当前的 SimpleXML XPath 以包含“或”条件。
这是下面的原始(工作)代码,没有任何“或”条件。
$strXpathVar = "Scholarship/Research";
$xml_record_awards_honor_scope_teaching = $xml_award_honor_report_record[0]->xpath('a:AWARDHONOR[a:SCOPE="'.$strXpathVar.'"]');
我像这样(如下)对其进行了“硬编码”,并且它有效:
$xml_record_awards_honor_scope_teaching = $xml_award_honor_report_record[0]->xpath('a:AWARDHONOR[a:SCOPE="Scholarship/Research" or "Teaching"]');
但是,我对如何使用 $strXpathVar 感兴趣,如下所示。 尽管我尝试以多种方式更改引号,但目前这不起作用:
$strXpathVar = " ""Scholarship/Research" or "Teaching"" ";
$xml_record_awards_honor_scope_teaching = $xml_award_honor_report_record[0]->xpath('a:AWARDHONOR[a:SCOPE="'.$strXpathVar.'"]');
simpleXML对象
$xml_award_honor_report_record
是在此步骤之前通过对用户名进行过滤而获得的。
$xml_award_honor_report_record = $xml_award_honor_report->xpath('//a:Record[contains(translate(@username,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz"),"'.$user_name.'")]');
这是 XML 的片段:
<Record userId="14" username="CSmith9">
<AWARDHONOR id="25">
<NAME>Instuction 2022</NAME>
<SCOPE>Scholarship/Research</SCOPE>
</AWARDHONOR>
<AWARDHONOR id="23">
<NAME>Instruction 2023</NAME>
<SCOPE>Teaching</SCOPE>
</AWARDHONOR>
</Record>
您可以以相反的方式使用 contains 方法 用您知道搜索字符串中不存在的字符将搜索字符串括起来;就像即
|
。
$strXpathVar = "|Scholarship/Research|Teaching|";
并且还使用该字符来包围元素值,如下所示
concat("|",A:SCOPE,"|"))]
你的陈述看起来像这样:
xpath('a:AWARDHONOR[contains("'.$strXpathVar.'",concat("|",A:SCOPE,"|"))]')
未测试。