이 XML이 있습니다 (라는 C # 문자열에 저장 됨 myXML
)
<?xml version="1.0" encoding="utf-16"?>
<myDataz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<listS>
<sog>
<field1>123</field1>
<field2>a</field2>
<field3>b</field3>
</sog>
<sog>
<field1>456</field1>
<field2>c</field2>
<field3>d</field3>
</sog>
</listS>
</myDataz>
모든 <sog>
요소 를 탐색하고 싶습니다 . 각각에 대해 아이를 인쇄하고 싶습니다 <field1>
.
그래서 이것은 내 코드입니다.
XmlDocument xmlDoc = new XmlDocument();
string myXML = "<?xml version=\"1.0\" encoding=\"utf-16\"?><myDataz xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><listS><sog><field1>123</field1><field2>a</field2><field3>b</field3></sog><sog><field1>456</field1><field2>c</field2><field3>d</field3></sog></listS></myDataz>"
xmlDoc.Load(myXML);
XmlNodeList parentNode = xmlDoc.GetElementsByTagName("listS");
foreach (XmlNode childrenNode in parentNode)
{
HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//field1").Value);
}
하지만 문자열을 XML로 읽을 수 없습니까? 나는 얻다System.ArgumentException
답변
Load가 아닌 LoadXml 메서드를 사용해야합니다.
xmlDoc.LoadXml(myXML);
Load 메서드는 파일에서 xml을로드하고 문자열에서 LoadXml을로드하려고합니다. XPath를 사용할 수도 있습니다.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
string xpath = "myDataz/listS/sog";
var nodes = xmlDoc.SelectNodes(xpath);
foreach (XmlNode childrenNode in nodes)
{
HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//field1").Value);
}
답변
Linq-XML 사용,
XDocument doc = XDocument.Load(file);
var result = from ele in doc.Descendants("sog")
select new
{
field1 = (string)ele.Element("field1")
};
foreach (var t in result)
{
HttpContext.Current.Response.Write(t.field1);
}
OR : <sog>
태그 의 노드 목록을 가져옵니다 .
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(myXML);
XmlNodeList parentNode = xmlDoc.GetElementsByTagName("sog");
foreach (XmlNode childrenNode in parentNode)
{
HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("field1").InnerText);
}
답변
다른 답변은 몇 년 전 (Windows Phone 8.1에서는 작동하지 않음)이므로 다른 옵션을 선택해야한다고 생각했습니다. Windows Phone 앱에 대한 RSS 응답을 구문 분석하는 데 사용했습니다.
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xml_string);
답변
또는 XmlSerializer 클래스를 사용하십시오.
XmlSerializer xs = new XmlSerializer(objectType);
obj = xs.Deserialize(new StringReader(yourXmlString));
답변
목적으로 System.Xml.Linq.XElement를 사용했습니다. xml의 첫 번째 자식 노드 (루트 노드가 아님)의 값을 읽으려면 아래 코드를 확인하십시오.
string textXml = "<xmlroot><firstchild>value of first child</firstchild>........</xmlroot>";
XElement xmlroot = XElement.Parse(textXml);
string firstNodeContent = ((System.Xml.Linq.XElement)(xmlroot.FirstNode)).Value;