(I am using 15rc2 because I need all the svg tags)

I am rendering a foreignObject svg tag. According to [MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject) I put body tag inside that tag and then whatever html I want in there.

``` html
<foreignObject>
  <body xmlns="http://www.w3.org/1999/xhtml">
   <!-- whatever html I want -->
  </body>
</foreignObject>
```

renderToString on the server leaves the body tag in place, and gives it a react-dataid. However when rendered on the client that body tag is removed. So when I look at the live elements, the body inside foreignObjects is gone, along with it's data-reactid.  The server source ( ie view page source ) shows that the body tag was rendered with the missing react-dataid.

The result is that you get a “Invariant Violation: Unable to find element with ID XX”, when the page updates, and somethings don't work.

Removing the body from inside the foreignObject tag seems to solve the problem, 

``` html
<foreignObject>
   <!-- whatever html I want -->
</foreignObject>
```

but I don't know if that is an "OK" solution to this or if that body tag is necessary in some scenarios.  But in either case this seems to be a scenario where server rendering results in different DOM/HTML then client rendering.

Is this a problem, or is the body tag not supposed to there anyway?

Todd

var allTags = [].concat(specialTags, formattingTags, ['mysterytag']);
    allTags.forEach(function(tag) {
      expect(validateDOMNesting.isTagValidInContext(tag, null)).toBe(true);
    });
  });
  it('allows valid nestings', function() {
    expect(isTagStackValid(['table', 'tbody', 'tr', 'td', 'b'])).toBe(true);
    expect(isTagStackValid(['body', 'datalist', 'option'])).toBe(true);
    expect(isTagStackValid(['div', 'a', 'object', 'a'])).toBe(true);
    expect(isTagStackValid(['div', 'p', 'button', 'p'])).toBe(true);
    expect(isTagStackValid(['p', 'svg', 'foreignObject', 'p'])).toBe(true);
    expect(isTagStackValid(['html', 'body', 'div'])).toBe(true);
    
    expect(isTagStackValid(['div', 'ul', 'ul', 'li'])).toBe(true);
    expect(isTagStackValid(['div', 'label', 'div'])).toBe(true);
    expect(isTagStackValid(['div', 'ul', 'li', 'section', 'li'])).toBe(true);
    expect(isTagStackValid(['div', 'ul', 'li', 'dd', 'li'])).toBe(true);
  });
  it('prevents problematic nestings', function() {
    expect(isTagStackValid(['a', 'a'])).toBe(false);
    expect(isTagStackValid(['form', 'form'])).toBe(false);
    expect(isTagStackValid(['p', 'p'])).toBe(false);
    expect(isTagStackValid(['table', 'tr'])).toBe(false);
    expect(isTagStackValid(['div', 'ul', 'li', 'div', 'li'])).toBe(false);
    expect(isTagStackValid(['div', 'html'])).toBe(false);
  });
});