Re: [xml] getting the output of string() in the xmllint shell



On 2019-12-21 09:28, Daniel Veillard wrote:
On Fri, Dec 20, 2019 at 12:46:23PM +0100, Gökçe Aydos wrote:
I use xmllint in my command-line scripts. The default mode of xmllint
does not support namespaces, so when I must deal with XML files with
namespaces I use the --shell mode of xmllint.

  That sounds ... wrong

Is xmllint not meant for using as a command-line tool? Can you please
elaborate on your answer?

...
  your request is very confusing but you should be able to get the string
value of the attributes directly by using an XPath looking for that
attribute

My example was probably not clear enough and misleading. I'll try with
another example:

  example.xml:

  <?xml version="1.0"?>
  <rdf:RDF
    xmlns:ns="#"
    xmlns:rdf="#"
  >
  <ns:n rdf:a="this is a very very very very very very long
string">text</ns:n>
  </rdf:RDF>

To extract the value of the rdf:a attribute, I would use:

  xmllint --xpath 'string(//ns:n/@rdf:a)' example.xml

But this errors out, because the plain xmllint does not support namespaces:

  XPath error : Undefined namespace prefix
  XPath evaluation failure

That is the reason why I use the shell mode:

  echo -e "setrootns\nxpath string(//ns:n/@rdf:a)" | xmllint --shell
example.xml

The result is truncated and not clean:

  / > / > Object is a string : this is a very very very very very very ...
  / >

Does someone have a better idea on how to get attribute values using
xmllint?

Gökçe





Attachment: smime.p7s
Description: S/MIME Cryptographic Signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]