Значение извлечения xmllint без xpath - PullRequest
1 голос
/ 20 марта 2019

Мне нужно проверить xml textvalue элемента в моем xml, как показано ниже, пока я получил значение всего поля dmdindex:, но мне просто нужен последний вывод результата drep.rightsFacet .Имейте в виду, что у моей версии xmllint нет xpath, поэтому я должен прибегнуть к xmllint --shell.Любая помощь приветствуется.

вот фрагмент XML-файла:

<?xml version="1.0" encoding="UTF-8"?>
<dmdindex:dmdindex xmlns:dmdindex="http://www.example.com/example/dmdindex/"
                   xmlns:functx="http://www.functx.com"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <dmdindex:record>
      <dmdindex:field name="drep.yearStart">1881</dmdindex:field>
      <dmdindex:field name="drep.pubConcat">[Detroit : Parke, Davis &amp; Co., 1881?]</dmdindex:field>
      <dmdindex:field name="drep.rights">blahblahblah</dmdindex:field>
      <dmdindex:field name="drep.rightsLink">https://creativecommons.org/publicdomain/mark/1.0/</dmdindex:field>
      <dmdindex:field name="drep.rightsFacet">Public domain</dmdindex:field>
   </dmdindex:record>
</dmdindex:dmdindex>

вот команда, которую я использовал

echo "cat //*[local-name()='dmdindex']/*[local-name()='record']/*[local-name()='field']" | xmllint --shell example.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'

, которая возвратила

 -------
Philadelphia : Sunshine Press, [1897]
 -------
blahblahblah
 -------
https://creativecommons.org/publicdomain/mark/1.0/
 -------
Public domain

Мне нужно только получить значение «Public domain» и игнорировать все остальное.спасибо!

1 Ответ

1 голос
/ 20 марта 2019

Вы можете добавить предикат к своему xpath, чтобы проверить значение атрибута name ...

echo "cat //*[local-name()='dmdindex']/*[local-name()='record']/*[local-name()='field'][@name='drep.rightsFacet']/text()" | xmllint --shell example.xml | sed '/^\/ >/d'
...