【问题标题】:xml document dont read string to xmlxml 文档不将字符串读取到 xml
【发布时间】:2022-01-15 21:05:56
【问题描述】:

大家好,我正在尝试访问 XML 中的指定值。但我的 POST 请求以这种格式将其作为字符串返回:

string smsList = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<response>\n\t<Count>2</Count>\n\t<Messages>\n\t\t<Message>\n\t\t\t<Smstat>0</Smstat>\n\t\t\t<Index>20001</Index>\n\t\t\t<Phone>+number</Phone>\n\t\t\t<Content>Test4</Content>\n\t\t\t<Date>2021-12-11 14:24:23</Date>\n\t\t\t<Sca>+number</Sca>\n\t\t\t<SaveType>4</SaveType>\n\t\t\t<Priority>0</Priority>\n\t\t\t<SmsType>1</SmsType>\n\t\t</Message>\n\t\t<Message>\n\t\t\t<Smstat>0</Smstat>\n\t\t\t<Index>20000</Index>\n\t\t\t<Phone>+number</Phone>\n\t\t\t<Content>Test3</Content>\n\t\t\t<Date>2021-12-11 14:02:48</Date>\n\t\t\t<Sca>+number</Sca>\n\t\t\t<SaveType>4</SaveType>\n\t\t\t<Priority>0</Priority>\n\t\t\t<SmsType>1</SmsType>\n\t\t</Message>\n\t</Messages>\n</response>"

            smsList = smsList.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
            smsList = smsList.Replace("\n", "");
            smsList = smsList.Replace("\t", "");

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(smsList);

但问题是我测试了多重变体以访问属性消息/消息,但它没有返回任何内容。

【问题讨论】:

  • 1.为什么要删除第一行以及空格和换行符? XmlDocument 将处理它。 2.请求返回的是字符串还是你读取响应的内容为字符串?
  • 我不确定,因为我正在尝试访问消息/消息属性。但它什么也找不到。像空 XML 或返回“文档”文本值。/
  • 这是你想要做的吗? dotnetfiddle.net/DEEhRy
  • 每条消息希望以 Smstat;Index;Phone;Content;Date;Sca;SaveType;Priority;SmsType 格式保存的差异很小

标签: c# xml string


【解决方案1】:

试试这个:

using System.Xml;
using System.Xml.Linq;
using System.Linq;

var xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<response>\n\t<Count>2</Count>\n\t<Messages>\n\t\t<Message>\n\t\t\t<Smstat>0</Smstat>\n\t\t\t<Index>20001</Index>\n\t\t\t<Phone>+number</Phone>\n\t\t\t<Content>Test4</Content>\n\t\t\t<Date>2021-12-11 14:24:23</Date>\n\t\t\t<Sca>+number</Sca>\n\t\t\t<SaveType>4</SaveType>\n\t\t\t<Priority>0</Priority>\n\t\t\t<SmsType>1</SmsType>\n\t\t</Message>\n\t\t<Message>\n\t\t\t<Smstat>0</Smstat>\n\t\t\t<Index>20000</Index>\n\t\t\t<Phone>+number</Phone>\n\t\t\t<Content>Test3</Content>\n\t\t\t<Date>2021-12-11 14:02:48</Date>\n\t\t\t<Sca>+number</Sca>\n\t\t\t<SaveType>4</SaveType>\n\t\t\t<Priority>0</Priority>\n\t\t\t<SmsType>1</SmsType>\n\t\t</Message>\n\t</Messages>\n</response>";
var document = XDocument.Parse(xmlStr);
var messages = document.Root.Descendants("Message").Select(x => new string[]
            {               
                x.Descendants("Smstat").FirstOrDefault().Value,
                x.Descendants("Index").FirstOrDefault().Value,
                x.Descendants("Phone").FirstOrDefault().Value.ToString(),
                x.Descendants("Content").FirstOrDefault().Value,
                x.Descendants("Date").FirstOrDefault().Value,
                x.Descendants("Sca").FirstOrDefault().Value,
                x.Descendants("SaveType").FirstOrDefault().Value,
                x.Descendants("Priority").FirstOrDefault().Value,
                x.Descendants("SmsType").FirstOrDefault().Value
            }).ToList();

Console.WriteLine("Smstat;Index;Phone;Content;Date;Sca;SaveType;Priority;SmsType");
foreach (var msg in messages)
{
  Console.WriteLine(String.Join(";", msg));
}

(如果您想尝试,它也在fiddle 上)

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2011-07-24
    • 2011-02-03
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多