0
I have an XML like this:
<Machines>
<Machine>
<Machine_Name>Mac Book Pro</Machine_Name>
<Machine_Type>Laptop</Machine_Type>
<Outputs>
<Output>
<Hour>1</Hour>
<Speed>Very Quick</Speed>
</Output>
<Output>
<Hour>2</Hour>
<Speed>Quick</Speed>
</Output>
</Outputs>
<Capacities>
<Capacity>
<Hour>1</Hour>
<Speed>50%</Speed>
</Capacity>
<Capacity>
<Hour>2</Hour>
<Speed>30%</Speed>
</Capacity>
</Capacities>
</Machine>
<Machine>
<Machine_Name>LG Desktops</Machine_Name>
<Machine_Type>Personal computers</Machine_Type>
<Outputs>
<Output>
<Hour>1</Hour>
<Speed>Fast</Speed>
</Output>
<Output>
<Hour>2</Hour>
<Speed>Moderate</Speed>
</Output>
</Outputs>
<Capacities>
<Capacity>
<Hour>1</Hour>
<Speed>30%</Speed>
</Capacity>
<Capacity>
<Hour>2</Hour>
<Speed>10%</Speed>
</Capacity>
</Capacities>
</Machine>
</Machines>


This is the regex i tried "<Capacity>(?<Value>[\d\w\s\W\D]*)<\/Capacity>"

但我得到的是位于第一次出现到最后一次出现之间的所有标签,我得到所有标签:输出,小时,速度,机器名称(我得到输出和容量的小时和速度)。从这个我想获取属于 (Capacities) 的标签 (Speed) 的值。也就是说,我需要测量特定机器类型每小时机器的速度能力,并将其与前一小时的速度进行比较,找出速度的增加或减少并相应地生成报告。

Can anyone please tell an accurate regex to fetch such data and I m strictly instructed to use regex to get these data I am not suppose to use XMLDocument so please kindly suggest me a regex i badly need it.
4

2 回答 2

1

再次考虑使用正则表达式以外的任何其他方法解析 XML,但请检查这是否可以帮助您:

string reg = @"<(?'tag'\w+?).*>" + 
             @"(?'value'.*?)"    +  
             @"</\k'tag'>";
string xml = "<test>this is the inner text</test>"; 
Match mMatch = Regex.Match (xml, reg);

然后您可以使用属性“组”来获取数据。

来源:10秒谷歌

于 2013-09-30T19:31:48.460 回答
0

而不是正则表达式,使用真正的 xml 解析器。例如,使用Linq To Xml

var speeds = XDocument.Load(fname)
             .XPathSelectElements("//Capacity/Speed")
             .Select(x => (string)x)
             .ToList();
于 2013-09-30T19:16:06.667 回答