anchor.diff:                      References = instState.References
                   }
               | _ ->
  -            let templateForChildren = parseNodeAndSiblingsAsTemplate fileId n.FirstChild
  +            let templateForChildren = parseNodeChildrenAsTemplate fileId n
               let isSvg = n.Name = "svg"
               let state = ParseState(fileId, templateForChildren.Holes, templateForChildren.SpecialHoles)
               let el = normalElement n isSvg (lazy templateForChildren.Value) state
  -            withoutAttr n TemplateAttr <| fun () ->
  -            withoutAttr n "ws-replace" <| fun () ->
  +            withoutAttr n ReplaceAttr <| fun () ->
               let txt = n.WriteTo()
               {
                   Value = [| el |]
  
positive.code:                     addHole attr.Value (holeDef HoleKind.ElemHandler)
                      yield Attr.OnAfterRender attr.Value
                  | VarAttr | HoleAttr | ReplaceAttr | TemplateAttr | ChildrenTemplateAttr ->
                      () // These are handled separately in parseNode*
                  | s when s.StartsWith EventAttrPrefix ->
                      let eventName = s.[EventAttrPrefix.Length..]
                      let eventType = getEventType eventName
  
negative.code:         )
          |> Array.concat
  
      let parseNodeChildrenAsTemplate fileId (parentNode: HtmlNode) =
          let state = ParseState(fileId)
          let src =
              use s = new StringWriter()
              let rec l = function
                  | null -> s.ToString()
                  | (n : HtmlNode) -> n.WriteTo s; l n.NextSibling
              l parentNode.FirstChild
          let line, col = parentNode.Line, parentNode.LinePosition
          let value = parseNodeAndSiblings false state parentNode.FirstChild
          { Holes = state.Holes; Value = value; Src = src; References = state.References
            SpecialHoles = state.SpecialHoles
            Line = line; Column = col }
  