C#,xml解析。获取标签之间的数据

时间:2010-09-28 06:51:03

标签: c# xml

我有一个字符串:

responsestring = "<?xml version="1.0" encoding="utf-8"?>
<upload><image><name></name><hash>SOmetext</hash>"

我如何获得

之间的值
<hash> and </hash>

我的尝试:

responseString.Substring(responseString.LastIndexOf("<hash>") + 6, 8); // this sort of works , but won't work in every situation.

也试过搞乱xmlreader,但找不到解决方案。

TY

6 个答案:

答案 0 :(得分:8)

尝试

XDocument doc = XDocument.Parse(str);
var a = from hash in doc.Descendants("hash")
        select hash.Value;

您将需要System.Core和System.Xml.Linq程序集引用

答案 1 :(得分:7)

其他人已经提出了LINQ to XML解决方案,如果可能的话,我也会使用它。

如果您坚持使用.NET 2.0,请使用XmlDocument甚至XmlReader

尝试使用SubstringIndexOf自行操纵原始字符串。使用某些描述的XML API。否则你弄错。这是使用正确的工具来完成工作的问题。正确解析XML是一项重要的工作 - 已经完成的工作。

现在,只是为了完整答案,这是一个简短但完整的程序,使用您的示例数据:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        string response = @"<?xml version='1.0' encoding='utf-8'?>
<upload><image><name></name><hash>Some text</hash></image></upload>";

        XDocument doc = XDocument.Parse(response);

        foreach (XElement hashElement in doc.Descendants("hash"))
        {
            string hashValue = (string) hashElement;
            Console.WriteLine(hashValue);
        }
    }
}

显然,这将遍历所有 hash个元素。如果您只需要一个,则可以根据您的要求使用doc.Descendants("hash").Single()doc.Descendants("hash").First()

请注意,我在此处使用的转换和Value属性都将返回元素中所有文本节点的串联。希望你没问题 - 或者你可以在必要的时候得到第一个直接孩子的文本节点。

答案 2 :(得分:1)

var val = XElement.Parse();

val.Descendants(...)。值

答案 3 :(得分:1)

让你的xml格式正确并用反斜杠转义双引号。然后应用以下代码

 XDocument resp = XDocument.Parse("<hash>SOmetext</hash>");

       var r= from element in resp.Elements()
           where element.Name == "hash"
           select element;


    foreach (var item in r)
    {
        Console.WriteLine(item.Value);
    }

答案 4 :(得分:0)

您可以使用xmlreader和/或xpath查询来获取所有需要的数据。

答案 5 :(得分:0)

XmlReader_Object.ReadToFollowing(“ hash”);

字符串值= XmlReader_Object.ReadInnerXml();