簡體   English   中英

如何在.NET中讀取XML?

[英]How to Read XML in .NET?

XML noob在這里! 所以我有一些xml數據:

<DataChunk>
    <ResponseChunk>
        <errors>
            <error code=\"0\">
                Something happened here: Line 1, position 1.
            </error>
        </errors>
    </ResponseChunk>
</DataChunk>

我如何得到一個“錯誤”列表,我可以訪問“錯誤代碼”和后面的文字說明......? 另外,我在c#中使用.net4.0 ...謝謝!

將XML加載到XmlDocument ,然后使用xpath查詢來提取所需的數據。

例如

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring);

XmlNode errorNode = doc.DocumentElement.SelectSingleNode("/DataChunk/ResponseChunk/Errors/error");

string errorCode = errorNode.Attributes["code"].Value;
string errorMessage = errorNode.InnerText;

如果XML有可能存在多個錯誤元素,則可以使用SelectNodes獲取包含該xpath所有元素的XmlNodeList 例如:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring);

XmlNodeList errorNodes = doc.DocumentElement.SelectNodes("/DataChunk/ResponseChunk/Errors/error");

foreach(XmlNode errorNode in errorNodes)
{
  string errorCode = errorNode.Attributes["code"].Value;
  string errorMessage = errorNode.InnerText;
}

選項2

如果您有XML的XML架構,則可以將架構綁定到類(使用.NET xsd.exe工具)。 完成后,您可以將XML反序列化為對象,並使用該對象而不是原始XML進行處理。 這本身就是一個完整的主題,所以如果你有模式,那么值得研究。

您可以使用Linq to XML

var doc = XDocument.Parse(xml);
var errors = from e in doc.Descendants("error")
             select new
             {
                code = e.Attribute("code").Value,
                msg = e.Value.Trim()
             };

foreach (var e in errors)
{
    // use e.code & e.msg
}

但是,如果您的輸入XML 非常大 ,那么使用XMLReader瀏覽文檔可能會更好。

XmlReader xmlReader = XmlReader.Create(new StringReader(response));
        AmortizationCalculatorBE amortization = new AmortizationCalculatorBE();
List<PaymentCalculator> paymentList = new List<PaymentCalculator>();
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(new StringReader(response));
        XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("response/amortizationschedule/payment");
        XmlNodeList nodeList2 = xmlDoc.DocumentElement.SelectNodes("response");
        foreach (XmlNode node in nodeList)
        {
            PaymentCalculator payment = new PaymentCalculator();
            payment.beginningbalance = node.SelectSingleNode("beginningbalance").InnerText;
            payment.principal = node.SelectSingleNode("principal").InnerText;
            payment.interest = node.SelectSingleNode("interest").InnerText;
            paymentList.Add(payment);

        }
        amortization._PaymentCalculator = paymentList;
        foreach (XmlNode node in nodeList2)
        {
            amortization.totalprincipal = node.SelectSingleNode("totalprincipal").InnerText;
            amortization.totalinterest = node.SelectSingleNode("totalinterest").InnerText;

        }

使用帶有CastIEnumerable<XmlElement>類型集合的SelectNodes 那么你可以嘗試使用linq獲取你的價值。

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml_str);
var errors = doc
            .SelectNodes("/DataChunk/ResponseChunk/Errors/error")
            .Cast<XmlElement>()
            .Select(x => new {
                         errorCode = x.Attributes["code"].Value,
                         errorMessage = x.InnerText
                    });

foreach (var item in errors)
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM