【问题标题】:How to read xml siblings using XmlReader in C#如何在 C# 中使用 XmlReader 读取 xml 兄弟姐妹
【发布时间】:2016-02-13 14:09:30
【问题描述】:

我想读取两个同级元素,请建议我在 C# 中使用 XmlReader 的适当方法

这是我的 XML

    <loginReturn>
        <canumber>100556369</canumber>
        <emailid>bhushan.patil@servpro.in</emailid>
        <firstname>abc</firstname>
        <lastname>abc</lastname>
        <masterca/>
        <message>Login succesful !</message>
        <meternumber>8683169</meternumber>
        <mobilenumber>1111111111</mobilenumber>
        <status>1</status>
        <subca/>
        <username>abcbbb</username>
     </loginReturn>

我想先阅读“状态”,如果它不等于“1”,然后阅读“消息”...

这是我的代码:

        using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
        {
            string msg = Strings.SUCCESS;

            reader.ReadToFollowing("status");
            var x = reader.ReadElementContentAsInt();

            if (x != 1)
            {
                reader.ReadToFollowing("message");
                msg = reader.ReadElementContentAsString();
            }

            return msg;
        }

【问题讨论】:

  • 我认为最好先阅读所有内容,然后在下一步进行一些逻辑工作并处理您的数据。
  • 不要假设排序(即使它似乎是固定的)。只需阅读 message 和 status (使用 ReadToNextSibling() 跳过你不需要的内容),当你拥有它们然后执行你的逻辑(是的,它会巧妙地命中性能,但除非您必须处理 10M 节点 IMO,否则您不会注意到任何差异)。
  • with 'reader.ReadToFollowing("status")' 光标移动到 "status" 节点.. 之后 reader 只指向 "status" 元素内.. 我怎么能读取两个元素并存储在 var.. 请用代码建议
  • 如果我的回答可以帮助您解决您的问题,请您投票并将其标记为已接受,谢谢!
  • 这似乎仍然是一个悬而未决的问题...您需要进一步的帮助吗?

标签: xml xml-parsing xmlreader


【解决方案1】:

编辑:您的评论明确表示 XmlDocument 在 Xamarin 中不可用。我没有使用 Xamarin 的经验,也没有机会测试它。但是一个简短的研究把我带到了XPathDocument(创建一个XPathNavigator),这似乎在 Xamarin 中得到支持。解决方案可能是这样的:

    string msg="OK";
    if(YourNavigator.Evaluate("/loginReturn/status/text()")!="1")
        msg=YourNavigator.Evaluate("loginReturn/message/text()");

这是完全未经测试的“空气代码”...希望这会有所帮助...

这是我以前对 XmlDocument 的回答 - 很遗憾没有在 Xamarin 中工作:

    string xml="<loginReturn><canumber>100556369</canumber><emailid>bhushan.patil@servpro.in</emailid>" +
               "<firstname>abc</firstname><lastname>abc</lastname><masterca/><message>Login succesful !</message>" + 
               "<meternumber>8683169</meternumber><mobilenumber>1111111111</mobilenumber><status>1</status><subca/>" + 
               "<username>abcbbb</username></loginReturn>";
    XmlDocument xdoc= new XmlDocument();
    xdoc.LoadXml(xml);

    string msg="OK";
    if(xdoc["loginReturn"]["status"].InnerText!="1")
        msg=xdoc["loginReturn"]["message"].InnerText;

【讨论】:

  • 您的回答是正确的,但我不能使用 XmlDocument.... 我正在使用不支持 XmlDocument 的 Xamarin PCL 进行编码
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 2019-08-29
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多