2013-09-30 67 views
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>" 

但我得到的是所有標籤之間的第一次發生到最後一次出現的是我得到所有標籤:輸出,小時,速度,machine_name(我得到小時和速度的輸出和容量)。從這我想獲取標籤(速度)落在(容量)下的值。那就是我需要測量每臺機器對特定機型的速度容量,並將它與前一小時的速度進行比較,並找出速度的增加和減少並相應地生成報告。如何使用正則表達式獲取父XML標記內的所有XML標記的值?

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

嘗試解析XML。 –

+0

如果這是學校作業,你應該這樣說。這是一個不尋常的要求,不要使用正確的XML實用程序類。 – Tormod

回答

0

而不是正則表達式,使用真正的XML解析器。例如,使用Linq To Xml

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

是的,我知道它是最簡單的方法,但我很無奈,因爲我非常嚴格地指示只使用正則表達式。我堅信只有使用正則表達式才能完成這項任務。請幫我出 – user2786794

+0

@ user2786794向他們展示這個鏈接http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags誰指示使用正則表達式 –

+0

我知道它顯然會感到沮喪,但它的工作問題,所以我不能按照指示去做。希望我得到一個答案,或者他們改變主意 – user2786794

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秒谷歌

+0

它產生一個錯誤說「無法識別的分組構造」。我用while(mMatch.Success){string matchfound + = mMaalue; mMatch = mMatch.NextMatch();}。我需要替換哪些東西? – user2786794

+0

我將它替換爲此字符串reg = @「<(?Capacity \ w +?)。」> + @「(?)*?>(?。*?)。*?)」+ @ 「」; – user2786794

+0

mMatch.Groups [「價值」]應該返回「這是內部文本」 – user1695928

相關問題