diff --git a/lib/pure/xmltree.nim b/lib/pure/xmltree.nim
index a9fc8998a8..3c6eb14e34 100644
--- a/lib/pure/xmltree.nim
+++ b/lib/pure/xmltree.nim
@@ -226,6 +226,18 @@ proc noWhitespace(n: XmlNode): bool =
proc add*(result: var string, n: XmlNode, indent = 0, indWidth = 2) =
## adds the textual representation of `n` to `result`.
+
+ proc addEscapedAttr(result: var string, s: string) =
+ # `addEscaped` alternative with less escaped characters.
+ # Only to be used for escaping attribute values enclosed in double quotes!
+ for c in items(s):
+ case c
+ of '<': result.add("<")
+ of '>': result.add(">")
+ of '&': result.add("&")
+ of '"': result.add(""")
+ else: result.add(c)
+
if n == nil: return
case n.k
of xnElement:
@@ -236,7 +248,7 @@ proc add*(result: var string, n: XmlNode, indent = 0, indWidth = 2) =
result.add(' ')
result.add(key)
result.add("=\"")
- result.addEscaped(val)
+ result.addEscapedAttr(val)
result.add('"')
if n.len > 0:
result.add('>')
@@ -381,6 +393,5 @@ proc findAll*(n: XmlNode, tag: string): seq[XmlNode] =
findAll(n, tag, result)
when isMainModule:
- let link = "http://nim-lang.org"
- assert """Nim rules.""" ==
+ assert """Nim rules.""" ==
$(<>a(href="http://nim-lang.org", newText("Nim rules.")))