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.
答案 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();