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

本文关键字:XML 何使用 正则表达式 获取 | 更新日期: 2023-09-27 18:33:18

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.

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

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

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

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

来源:谷歌的10秒

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

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