我有一个字符串:
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
答案 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
。
但不尝试使用Substring
和IndexOf
自行操纵原始字符串。使用某些描述的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();