使用<和>解析XML

5

我试图剥离一些XML,并仅获取与字段相关的值,但XML不使用小于号和大于号。 我尝试在字段名称周围进行子字符串操作(在下面的情况下是Date),这很好用。

    <my:Date xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-07-27T23:04:34">2014-08-15</my:Date>

然而,我无法子字符串周围的小于号和大于号。我的代码如下:
public string processReportXML(string field, string xml)
    {
        try
        {
            string result = xml.Substring(xml.IndexOf(field));
            int resultIndex = result.LastIndexOf(field);
            if (resultIndex != -1) result = result.Substring(0, resultIndex);

            result = result.Substring(result.IndexOf(">"));
            resultIndex = result.IndexOf("<");
            if (resultIndex != -1) result = result.Substring(0, resultIndex);

            return field + ": " + result.Substring(4) + "\n";
        }
        catch (Exception e)
        {
            return field + " failed\n";
        }
    }

我在测试项目中尝试过,它可以正常工作,但在我的实际 Web 服务中,我总是得到索引应该大于 0 的错误。我还尝试使用正则表达式替换字符,但这也没有起作用。

result = Regex.Replace(result, "&(?!(amp|apos|quot|lt|gt);)", "hidoesthiswork?");
1个回答

13

您有经过HTML编码的数据。

在您的方法开头添加以下内容,即可得到简单的解决方案:

xml = HttpUtility.HtmlDecode(xml);

如果您在使用.NET 4.0+,则可以使用WebUtility.HtmlDecode,详见此答案

从长远来看,您应该使用XML解析器或类似LINQ-XML的工具来访问这些数据。正则表达式并不适合处理这种结构化数据。


谢谢 :) 现在我应该能够获取标签之间的innertext,对吗? - Zoosmell
是的,你真的应该考虑使用LINQ to XML来完成这个任务 :) - Codeman
好的,我会添加一个根节点使其格式正确,对吗?然后循环遍历HTML并将每个元素变成新的XElement? - Zoosmell
你不需要循环,只需通过LINQ-SQL将其转换为集合即可。阅读相关资料,它非常酷! - Codeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接