
XMLReader::fromString을 사용하여 XML 문서를 파싱할 때, 루트 노드가 없는 경우 에러가 발생하는 이유는 XMLReader::fromString은 XML 문서의 루트 노드를 자동으로 인식하기 때문입니다. 루트 노드가 없는 XML 문서를 파싱하려면 XMLReader::create()를 사용하여 XMLReader 객체를 생성한 후, setElementHandler() 메소드를 사용하여 요소 처리 핸들러를 설정한 후, read() 메소드를 호출하여 XML 문서를 파싱할 수 있습니다.
루트 노드가 없는 XML 문서를 파싱하는 예제는 다음과 같습니다.
#hostingforum.kr
csharp
using System;
using System.IO;
using System.Xml;
class XmlReaderExample
{
static void Main()
{
string xmlString1 = @"
John
30
";
string xmlString2 = @"
Jane
25
";
// 루트 노드가 있는 XML 문서를 파싱
XmlDocument xmlDoc1 = new XmlDocument();
xmlDoc1.LoadXml(xmlString1);
Console.WriteLine("루트 노드가 있는 XML 문서:");
Console.WriteLine(xmlDoc1.OuterXml);
// 루트 노드가 없는 XML 문서를 파싱
XmlDocument xmlDoc2 = new XmlDocument();
xmlDoc2.LoadXml(xmlString2);
Console.WriteLine("루트 노드가 없는 XML 문서:");
Console.WriteLine(xmlDoc2.OuterXml);
}
}
위의 예제에서, 루트 노드가 있는 XML 문서는 XmlDocument.LoadXml() 메소드를 사용하여 파싱할 수 있습니다. 루트 노드가 없는 XML 문서는 XmlDocument.LoadXml() 메소드를 사용하여 파싱할 수 없습니다. 대신, XMLReader.create() 메소드를 사용하여 XMLReader 객체를 생성한 후, setElementHandler() 메소드를 사용하여 요소 처리 핸들러를 설정한 후, read() 메소드를 호출하여 XML 문서를 파싱할 수 있습니다.
#hostingforum.kr
csharp
using System;
using System.IO;
using System.Xml;
class XmlReaderExample
{
static void Main()
{
string xmlString2 = @"
Jane
25
";
// 루트 노드가 없는 XML 문서를 파싱
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
using (StringReader sr = new StringReader(xmlString2))
{
using (XmlReader xr = XmlReader.Create(sr, settings))
{
while (xr.Read())
{
if (xr.NodeType == XmlNodeType.Element)
{
Console.WriteLine($"Element: {xr.Name}");
}
else if (xr.NodeType == XmlNodeType.Text)
{
Console.WriteLine($"Text: {xr.Value}");
}
}
}
}
}
}
위의 예제에서, 루트 노드가 없는 XML 문서는 XmlReader.Create() 메소드를 사용하여 XmlReader 객체를 생성한 후, read() 메소드를 호출하여 XML 문서를 파싱할 수 있습니다. XmlReaderSettings 클래스를 사용하여 XML 문서의 파싱 옵션을 설정할 수 있습니다.
2025-05-08 21:16