<DeviceProfile xmlns="http://www.hp.com/schema/m2m/">
<Metadata>
<DeviceProfileType>HPIOT</DeviceProfileType>
<OntologyReference xmlns:tns="http://www.yyy.com/schema/m2m/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<AssetParams ParamName="Device-ID" DisplayName="Device-ID" Mandatory="true" ReadOnly="true" DataType="String" Category="IoT" LiveUpdate="false" xpath="'Unit-ID''" Decoding="none" MinLength="1" />
<AssetParams ParamName="deviceHost" DisplayName="Device Host" Mandatory="false" ReadOnly="false" DataType="String" Category="IoT" Decoding="none" />
<AssetParams ParamName="devicePort" DisplayName="Device Port" Mandatory="false" ReadOnly="false" DataType="number" Category="IoT" Decoding="none" />
<AssetParams ParamName="deviceMSISDN" DisplayName="Device MSISDN" Mandatory="true" ReadOnly="false" DataType="number" Category="IoT" Decoding="none" />
<AssetParams ParamName="preferredProtocol" DisplayName="Preferred Protocol" Mandatory="true" ReadOnly="false" DataType="Choice" Category="IoT" Decoding="none" ChoiceElements="TCP,UDP" />
</Metadata>
</DeviceProfile>
在上面的xml代码中,获取所有AssetParam
属性的XPath表达式是什么?
为什么没有//AssetParams
工作?
答案 0 :(得分:1)
使用此(不关心名称空间):
'//@DisplayName | //@Device-ID | //@Mandatory | //@ReadOnly | //@DataType | //@Category | //@LiveUpdate | //@xpath | //@Decoding | //@MinLength'
答案 1 :(得分:1)
您的XPath正在尝试选择未绑定到任何命名空间并具有local-name()
AssetParams的元素。
很容易忽略,但所有元素都绑定到命名空间。
在DeviceProfile
元素上:xmlns="http://www.hp.com/schema/m2m/"
表示它及其后代绑定到该命名空间。如果使用了名称空间前缀,那将更加明显。
您没有指定用于执行XPath的内容,或者它支持的版本。
XPath 1.0表达式将匹配任何元素,然后在谓词中,按local-name()
//*[local-name()='AssetParams']
使用XPath 2.0(及更高版本),您可以使用通配符作为命名空间:
//*:AssetParams