使用 SimpleXML XPath 查找“或”条件值

问题描述 投票:0回答:1

我正在努力扩展我当前的 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>
xpath conditional-statements concatenation simplexml
1个回答
0
投票

您可以以相反的方式使用 contains 方法 用您知道搜索字符串中不存在的字符将搜索字符串括起来;就像即

|

$strXpathVar =  "|Scholarship/Research|Teaching|";

并且还使用该字符来包围元素值,如下所示

concat("|",A:SCOPE,"|"))]

你的陈述看起来像这样:

xpath('a:AWARDHONOR[contains("'.$strXpathVar.'",concat("|",A:SCOPE,"|"))]')

未测试。

© www.soinside.com 2019 - 2024. All rights reserved.