<rim:Slot name="sourcePatientInfo">
<rim:ValueList>
<rim:Value>PID-3|ST-1000^^^&1.3.6.1.4.1.21367.2003.3.9&ISO</rim:Value>
<rim:Value>PID-5|Doe^John^^^</rim:Value>
<rim:Value>PID-7|999999</rim:Value>
<rim:Value>PID-8|M</rim:Value>
<rim:Value>PID-11|19999 St^^Metropolis^Il^44130^USA</rim:Value>
</rim:ValueList>你好,我正在尝试从value部分获取数据。我没有发布整个xml,因为它很大,但这是运行这个xpath //*@name='sourcePatientInfo‘之后得到的部分。我想在此之后添加一个包含,比如PID-3文本,但是我的代码包含的不是工作代码。
./Value[contains(., 'PID-3|')]]试着把它们结合起来
//*[@name='sourcePatientInfo' and ./Value[contains(., 'PID-3|')]]谢谢
发布于 2015-07-02 17:05:30
我看到了两个问题。
rim:Value)的名称空间前缀为rim。这意味着在您的Value中使用XPath将无法工作,因为这将尝试在没有名称空间中选择Value。
如果使用的工具允许将前缀绑定到命名空间URI,则将其绑定到输入rim中的任何名称空间URI。然后,您可以在rim中使用XPath (或绑定名称空间URI的任何前缀)。
如果工具不允许将命名空间URI绑定到前缀,则可以使用local-name() (以及理想的namespace-uri())。rim:Value是rim:Slot (它有正确的@name)的后代,而不是直接的子级。这意味着./Value (或./rim:Value)不会选择任何东西。
如果您确信rim:Value是rim:ValueList的子级,则可以直接指定它。如果rim:ValueList可以改变,但rim:Value的深度是相同的,则可以使用*。如果所有这些都不为人所知,可以使用//。下面是一些选项( rim绑定)..。
//*[@name='sourcePatientInfo']/rim:ValueList/rim:Value[contains(.,'PID-3|')]
//*[@name='sourcePatientInfo']/*/rim:Value[contains(.,'PID-3|')]
//*[@name='sourcePatientInfo']//rim:Value[contains(.,'PID-3|')]如果不能绑定命名空间..。
//*[@name='sourcePatientInfo']//*[local-name()='Value'][contains(.,'PID-3|')]使用local-name()的示例将匹配本地名称为Value的任何元素,无论它在哪个名称空间中。更具体地说,在XPath中,您可以添加namespace-uri()..。
//*[@name='sourcePatientInfo']//*[local-name()='Value' and namespace-uri()='some namespace uri'][contains(.,'PID-3|')] https://stackoverflow.com/questions/31188725
复制相似问题