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