节点中带有空格的 XPath 表达式表示挑衅.js

XPath expression with white space in node for defiant.js

本文关键字:表示 表达式 js XPath 空格 节点      更新时间:2023-09-26

我正在使用defiant.js来搜索json。根据他们的文档,我需要提供 xpath 来从 json 中搜索特定元素。当节点中没有空格时,我成功了。但是我的 json 现在包含空格。这是我的csv。我想获得具有特定证书编号的项目。

    [
  {
    "Certificate Number":1019174,
    "Last Name":"MA",
    "First Name":"SHI",
    "Title":"MR",
    "DOB":"1/28/1990",
    "Address":"75 LEYLAND HOUSE",
    "City":"London",
    "Postal Code":"E14 0BU",
    "Country":"UK",
    "Passpot Number":"E0438750",
    "Course Level":7,
    "Course Details":"POST GRADUATE DIPLOMA IN INTERNATIONAL COMMERCIAL LAW",
    "Course Start Date":"2/2/2014",
    "Course End Date":"2/23/2015",
    "Note":"RPL Route Entry",
    "Remarks":""
  },
  {
    "Certificate Number":101235,
    "Last Name":"UD",
    "First Name":"HAN",
    "Title":"MR",
    "DOB":"1/28/1990",
    "Address":"75 LEYLAND HOUSE",
    "City":"London",
    "Postal Code":"E14 0BU",
    "Country":"UK",
    "Passpot Number":"E0438750",
    "Course Level":7,
    "Course Details":"POST GRADUATE DIPLOMA IN INTERNATIONAL COMMERCIAL LAW",
    "Course Start Date":"2/2/2014",
    "Course End Date":"2/23/2015",
    "Note":"RPL Route Entry",
    "Remarks":""
  }
]

我的 xpath 是

//[Certificate Number="101234"]

当属性名称类似于证书编号时,我没有问题找到该项目。但是由于证书和编号之间的空格,我无法获得该项目。那么我怎样才能从这个 json 中获取具有特定证书编号的项目。除了挑衅之外的任何替代解决方案都可以.js。

似乎作为 XML 节点名称无效的 JSON 属性(因为它们包含空格),它们正在通过 defiant.js 转换为命名空间中的 XML 属性。

例如,你的JSON的这一部分.. :

{
    "Certificate Number":101235,
    "Last Name":"UD",
    "First Name":"HAN",
    "Title":"MR",
    "DOB":"1/28/1990",
    "Address":"75 LEYLAND HOUSE",
    "City":"London",
    "Postal Code":"E14 0BU",
    "Country":"UK",
    "Passpot Number":"E0438750",
    "Course Level":7,
    "Course Details":"POST GRADUATE DIPLOMA IN INTERNATIONAL COMMERCIAL LAW",
    "Course Start Date":"2/2/2014",
    "Course End Date":"2/23/2015",
    "Note":"RPL Route Entry",
    "Remarks":""
  }

..转换为以下XML结构(仅在此处发布的XML的相关部分):

<d:item xmlns:d="defiant-namespace" d:mi="34">
   <d:name d:name="Certificate Number" d:constr="Number" d:mi="18">101235</d:name>
   <d:name d:name="Last Name" d:constr="String" d:mi="19">UD</d:name>
   <d:name d:name="First Name" d:constr="String" d:mi="20">HAN</d:name>
   <Title d:constr="String" d:mi="21">MR</Title>
   <DOB d:constr="String" d:mi="22">1/28/1990</DOB>
   <Address d:constr="String" d:mi="23">75 LEYLAND HOUSE</Address>
   <City d:constr="String" d:mi="24">London</City>
   <d:name d:name="Postal Code" d:constr="String" d:mi="25">E14 0BU</d:name>
   <Country d:constr="String" d:mi="26">UK</Country>
   <d:name d:name="Passpot Number" d:constr="String" d:mi="27">E0438750</d:name>
   <d:name d:name="Course Level" d:constr="Number" d:mi="28">7</d:name>
   <d:name d:name="Course Details" d:constr="String" d:mi="29">POST GRADUATE DIPLOMA IN INTERNATIONAL COMMERCIAL LAW</d:name>
   <d:name d:name="Course Start Date" d:constr="String" d:mi="30">2/2/2014</d:name>
   <d:name d:name="Course End Date" d:constr="String" d:mi="31">2/23/2015</d:name>
   <Note d:constr="String" d:mi="32">RPL Route Entry</Note>
   <Remarks d:constr="String" d:mi="33"/>
</d:item>

因此,根据XML结构,这是通过"证书编号"值获取上述元素的一种可能的XPath:

//*[*[@*="Certificate Number" and .=101235]]
使用

JSONPath 你应该能够使用

//Certificate Number="101235"

无需[]