Como saber se uma string é xml?

Temos um campo de string que pode conter XML ou texto simples. O XML não contém<?xml cabeçalho, e nenhum elemento raiz, isto é, não está bem formado.

Precisamos ser capazes de redigitar dados XML, esvaziando elementos e valores de atributos, deixando apenas seus nomes, então eu preciso testar se essa string é XML antes de ser redigida.

Atualmente estou usando essa abordagem:

string redact(string eventDetail)
{
    string detail = eventDetail.Trim();
    if (!detail.StartsWith("<") && !detail.EndsWith(">")) return eventDetail;
    ...

Existe uma maneira melhor?

Há algum caso extremo que esta abordagem possa perder?

Eu aprecio poder usarXmlDocument.LoadXml e pegarXmlException, mas isso parece uma opção cara, pois eu já sei que muitos dos dados não estarão em XML.

Aqui está um exemplo dos dados XML, além de perder um elemento raiz (que é omitido para economizar espaço, já que haverá muitos dados), podemos assumir que ele é bem formado:

<TableName FirstField="Foo" SecondField="Bar" /> 
<TableName FirstField="Foo" SecondField="Bar" /> 
...

Atualmente, estamos usando apenas valores baseados em atributos, mas podemos usar elementos no futuro se os dados se tornarem mais complexos.

SOLUÇÃO

Com base em vários comentários (obrigado pessoal!)

string redact(string eventDetail)
{
    if (string.IsNullOrEmpty(eventDetail)) return eventDetail; //+1 for unit tests :)
    string detail = eventDetail.Trim();
    if (!detail.StartsWith("<") && !detail.EndsWith(">")) return eventDetail;
    XmlDocument xml = new XmlDocument();
    try
    {
        xml.LoadXml(string.Format("<Root>{0}</Root>", detail));
    }
    catch (XmlException e)
    {
        log.WarnFormat("Data NOT redacted. Caught {0} loading eventDetail {1}", e.Message, eventDetail);
        return eventDetail;
    }
    ... // redact

questionAnswers(7)

yourAnswerToTheQuestion