如何使用正则表达式获取父XML标记内的所有XML标记的值?

时间:2013-09-30 19:12:28

标签: c# xml regex

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>"

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

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.

2 个答案:

答案 0 :(得分:1)

再次考虑使用除regexp以外的任何其他方法解析XML,但请检查是否可以帮助您:

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

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

来源:谷歌10秒

答案 1 :(得分:0)

使用真正的xml解析器而不是Regex。例如,使用Linq To Xml

var speeds = XDocument.Load(fname)
             .XPathSelectElements("//Capacity/Speed")
             .Select(x => (string)x)
             .ToList();