source

문자열에서 XML을 읽고 몇 가지 필드 가져오기 - XML을 읽는 문제

ittop 2023. 10. 14. 10:37
반응형

문자열에서 XML을 읽고 몇 가지 필드 가져오기 - XML을 읽는 문제

이 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));

시스템을 사용했습니다.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;

언급URL : https://stackoverflow.com/questions/8401280/read-a-xml-from-a-string-and-get-some-fields-problems-reading-xml

반응형