For the xml you posted I would go with xmlstarlet sel --noblanks --text -t -m //item -v title -v description weewx_rss-xx.xml, but the RSS you linked looks a bit different, so it looks like just xmlstarlet sel --noblanks --text -t -v //item weewx_rss.xml would work.
See http://xmlstar.sourceforge.net/doc/UG/ch05.html
... "/Root/key[1]/key[2]/.../@value" ... Node names are case-sensitive, so use Key and Value. ... "/Root/...[@Name=ActiveSkin]..." You want to compare against string value, so use @Name='ActiveSkin'.
' being replaced by ' in the output xml. Any ideas why this is occuring Xmlstarlet works by reading in and parsing the XML data into a tree, in parsed form there is no distinction between ' and ' . and how I can avoid it from happening? Don't use Xmlstarlet.
Use - to indicate stdin, e.g., cat a.xml | xmlstarlet val --xsd b.xsd --err -
Ah, yes, that would explain why it's missing. In this case the way to go is to try to find a fix for the "impossible" one in libxslt... Another possibility (at least theoretically) would be to rewrite the xml ed subcommand to use XSLT. But that's quite a lot of work.
The EXSLT functions come from libxslt. The str:* functions are included: https://sourceforge.net/p/xmlstar/code/ci/master/tree/src/xml_edit.c#l465 libxslt does define str:replace so it should work: https://gitlab.gnome.org/GNOME/libxslt/blob/master/libexslt/strings.c#L850 Perhaps your version of libxslt is too old?
Various hangs and infinite loops found with AFL