This cannot be done without making substantial assumptions about the nature of your text. First of all, you should assume that it is well-formed XML and that it contains neither CDATA sections nor namespaces.
If you start at any position in the middle of the stream and back up until you click on what appears to be the beginning of an element, you cannot understand that the text you are looking at is actually the beginning of the element. It could be CDATA. And you cannot say that this is not CDATA until you have diverted the entire stream looking for <![CDATA[ , and found it.
Namespaces pose a similar problem. If you find the start tag, for example <Foo , you cannot know for sure that Foo is in the default namespace until you return completely to the root element of the document and make sure that the ancestor element does not have a namespace declaration. If you find <x:Foo , you need to back off until you find a private element with xmlns:x declaration.
If you know for sure that the text is well-formed XML, that it does not contain CDATA, and that its use of namespaces is limited (that is, you can specify which namespace is in the element by simply looking at its beginning tag), then some of that what you are trying to do is at least possible.
You can back up to the first start tag that you encounter, create a StreamReader whose origin is this position, and use it to create an XPathDocument that is configured to process document fragments. Please note that, by the way, you are not sure that XPathDocument will not read all the way to the end of the text the first time you use it, unless, again, you are aware of the nature of the text and you know that the corresponding end tag will be present.
But this will not handle the specific case you mentioned, i.e. find the parent element. To find the parent element, you will need to find the start tag, which is not preceded (as you move backward) by the corresponding end tag. This is not so difficult to do - each < character you find will be the beginning of either a start tag, or an end tag, or an empty element, and you can simply put end tags on the stack and place them when you find their corresponding start tag. When you click on the start tag and the stack is empty, you are at the beginning of the parent element.
But this is also a process that can lead you to completely go to the source of the stream, especially in the trivial case where the XML you are looking for is a classically crazy XML log format:
<log> <entry>...</entry> <entry>...</entry>
... repeated to infinity