variable = 5
variable != 10 # => true
!variable # => false (5 is evaluated to true, then negated)
!variable = 10 # => warning: found = in conditional, should be ==
您好我正在尝试从值部分获取数据。我没有发布整个xml,因为它很大,但这是我在运行这个xpath后得到的部分// * [@ name =' sourcePatientInfo']。我想在此之后添加一个包含来说出PID-3文本,但我的代码包含的不是代码。
<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[contains(., 'PID-3|')]]
由于
答案 0 :(得分:0)
我看到两个问题。
您尝试选择的元素(rim:Value
)的名称空间前缀为rim
。这意味着在XPath中使用Value
是行不通的,因为这会尝试在没有名称空间的情况下选择Value
。
如果您使用的工具允许您将前缀绑定到命名空间URI,请将其绑定到输入XML绑定rim
的命名空间URI中的任何内容。然后,您可以在XPath中使用rim
(或绑定命名空间URI的任何前缀)。
如果该工具不允许将名称空间URI绑定到前缀,则可以使用local-name()
(理想情况下为namespace-uri()
)。
rim:Value
是rim:Slot
的后代(具有正确的@name
),而不是直接的孩子。这意味着./Value
(或./rim:Value
)不会选择任何内容。
如果您确定rim:Value
是rim:ValueList
的孩子,则可以直接指定。{p>如果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|')]