title: Check well-formed XML without a try/catch?
body: <p>Does anyone know how I can check if a string contains well-formed XML without using something like <code>XmlDocument.LoadXml()</code> in a try/catch block? I've got input that may or may not be XML, and I want code that recognises that input may not be XML without relying on a try/catch, for both speed and on the general principle that non-exceptional circumstances shouldn't raise exceptions. I currently have code that does this;</p>
  
  <pre><code>private bool IsValidXML(string value)
      {
          try
          {
              // Check we actually have a value
              if (string.IsNullOrEmpty(value) == false)
              {
                  // Try to load the value into a document
                  XmlDocument xmlDoc = new XmlDocument();
  
                  xmlDoc.LoadXml(value);
  
                  // If we managed with no exception then this is valid XML!
                  return true;
              }
              else
              {
                  // A blank value is not valid xml
                  return false;
              }
          }
          catch (System.Xml.XmlException)
          {
              return false;
          }
      }
  </code></pre>
  
  <p>But it seems like something that shouldn't require the try/catch. The exception is causing merry hell during debugging because every time I check a string the debugger will break here, 'helping' me with my pesky problem. </p>