这是字符串中的数据:
<temp><id>TGPU1</id><label>GPU</label><value>67</value></temp><temp><id>THDD1</id><label>ST3320620AS</label><value>34</value></temp><temp><id>FCPU</id><label>CPU</label><value>1430</value></temp>
(还有更多,这只是原始输出的一小部分。) 我想做的是通过一些快速代码(不是实际代码有多长,但执行需要多长时间)来提取它将删除所有
<temp><id>TGPU1</id><label>GPU</label><value>
并将其输出到一个新字符串,其中只包含所有<value>
和</value>
之间的值。我正在寻找字符串中的输出,如:67341430
我找到了这段代码:
bool FoundMatch = false;
try {
Regex regex = new Regex(@"<([be])pt[^>]+>.+?</\1pt>");
while(regex.IsMatch(yourstring) ) {
yourstring = regex.Replace(yourstring, "");
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
但它只删除&lt; * pt&gt;哪个冷改变去除别的东西。但它一次只能删除一个标签。如果我必须删除所有标签,速度不会很快。
感谢
PS如果您想知道,下面的代码是我想要添加的代码。这也是打印上述原始字符串的代码:
static void Main(string[] args)
{
Console.WriteLine("Memory mapped file reader started");
using (var file = MemoryMappedFile.OpenExisting("sensor"))
{
using (var reader = file.CreateViewAccessor(0, 3800))
{
var encoding = Encoding.ASCII;
Console.WriteLine(encoding.GetString(bytes));
}
}
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
答案 0 :(得分:4)
您可以使用LINQ:
String.Concat(
XElement.Parse(...)
.Descendants("value")
.Select(v => v.Value)
);
如果您真的关注效果,可以直接使用XmlReader
来阅读<value>
代码并附加到StringBuilder
。
但是,这是不值得的,除非你的XML数百兆字节。