使用XPATH 1.0和包含特定文本的xmlstarlet选择节点

凯尔·班纳吉(Kyle Banerjee)

从下面的XML开始:

<?xml version="1.0" encoding="UTF-8"?><searchRetrieveResponse>
  <version>1.2</version>
  <numberOfRecords>1</numberOfRecords>
  <records>
    <record>
      <recordSchema>marcxml</recordSchema>
      <recordPacking>xml</recordPacking>
      <recordData>
        <record>
          <leader>01448cam a2200445Ia 4500</leader>
          <controlfield tag="001">9910650701858</controlfield>
          <controlfield tag="005">20181227054218.2</controlfield>
          <controlfield tag="008">930525s1941    nyu      b    001 0 eng d</controlfield>
          <datafield tag="035" ind1=" " ind2=" ">
            <subfield code="a">(OCoLC)28157672</subfield>
          </datafield>
          <datafield tag="035" ind1=" " ind2=" ">
            <subfield code="a">(OCoLC)ocm28157672</subfield>
          </datafield>
          <datafield tag="035" ind1=" " ind2=" ">
            <subfield code="a">(EXLNZ-01ALLIANCE_NETWORK)99153881770001451</subfield>
          </datafield>
          <datafield tag="040" ind1=" " ind2=" ">
            <subfield code="a">UTS</subfield>
            <subfield code="b">eng</subfield>
            <subfield code="c">UTS</subfield>

我只需要使用xmlstarlet(XPATH 1.0)选择/searchRetrieveResponse/records/record/recordData/record/datafield[@tag="035"]/subfield[@code="a"]包含(EXLNZ-01ALLIANCE_NETWORK的文本节点,所以理想的输出是(EXLNZ-01ALLIANCE_NETWORK)99153881770001451

我尝试了多种变体,xmlstarlet sel -T -t -m '/searchRetrieveResponse/records/record/recordData/record/datafield[@tag="035"]/subfield[@code="a"][text()[contains(.,'ALLIANCE_NETWORK')]]' -v '.'但我不断返回所有035 / subfield [@ code =“ a”],而不仅仅是返回我想要的那个。我究竟做错了什么?谢谢

凯尔·班纳吉(Kyle Banerjee)

弄清楚-包含过滤器的设置不正确。我之所以发布,仅是因为我发现匹配该节点很尴尬。

xmlstarlet sel -T -t -m '/searchRetrieveResponse/records/record/recordData/record/datafield[@tag="035"]/subfield[@code="a"][contains(text(), "ALLIANCE_NETWORK")]' -v '.'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用xpath选择不包含链接但包含特定文本的节点

使用 XPath 1 在 2 个 XPath 节点之间获取文本。通用解决方案,不是特定情况

使用 Selenium、python 和 Xpath 在包含特定文本的表格行中选择特定按钮

在特定文本之后选择和修改xpath节点

使用XPath选择节点

xpath选择节点文本和子节点

如何使用xpath选择文本最长的节点?

在powershell中使用xpath选择特定节点

使用 xpath 选择包含标签的文本

选择器无效:xpath表达式“ // * [@ id ='topstuff'] / div / div / p [1] / text()[2]”的结果是:使用XPath和Selenium的[对象文本]

使用 xPath 和联合选择节点

XPath在特定节点之后选择文本

使用Xpath和Linq查找特定节点

使用xmlstarlet的XPath查询

xpath:如何使用xpath获取特定的文本?

选择“使用包含特定内部文本的子节点的单节点”。XML文档

使用XPATH,如何选择包含特定字符串的ANY节点

使用Java和Xpath检查元素节点是否不包含文本?

XPATH 按包含文本的类型选择父节点

XPath:如何选择具有包含文本的同级节点?

使用XPath选择没有文本同级的节点

使用与在1个匹配节点的firepath中正常工作的xpath定位元素时获取InvalidSelectorException

xpath查找包含1 tr和1 th的行

使用包含空格的 xpath

使用Xpath提取文本

使用XPath和WebBrowser控件选择多个节点

使用 Scrapy 选择包含特定属性的所有 Div 的 XPATH

在 xPath 中使用 AND 和 NOT

使用Jdom / XPath和“