(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

if (problematic) {
      var ancestorTag = problematic.tag;
      var ancestorInstance = problematic.instance;
      var childOwner = childInstance && childInstance._currentElement._owner;
      var ancestorOwner =
        ancestorInstance && ancestorInstance._currentElement._owner;
      var childOwners = findOwnerStack(childOwner);
      var ancestorOwners = findOwnerStack(ancestorOwner);
      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);
      var i;
      var deepestCommon = -1;
      for (i = 0; i < minStackLen; i++) {
        if (childOwners[i] === ancestorOwners[i]) {
          deepestCommon = i;
        } else {
          break;
        }
      }
      var UNKNOWN = '(unknown)';
      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(
        (inst) => inst.getName() || UNKNOWN
      );
      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(
        (inst) => inst.getName() || UNKNOWN
      );
      var ownerInfo = [].concat(
        
        
        deepestCommon !== -1 ?
          childOwners[deepestCommon].getName() || UNKNOWN :