2013-02-26 94 views
0

我想修剪超過1個字符的字符串。 The String:Trim string with trim.End

<incident_response> 
<msg_id>50889_360</msg_id> 
<inquiry_id>INC000000087930</inquiry_id> 
<response_dt>02.26.2013 14:49:12</response_dt> 
<status>0</status> 
<error></error> 
</incident_response> 

是的,我知道它是一個XML文件。

string responseXML; 
string inc_number = 
responseXML.Trim().Trim('<inquiry_id>').TrimEnd('</inquiry_id>'); 

我得到一個CS1012錯誤,因爲是多個字符。我需要整個inquiry_id(INC000000087930)沒有任何其他字符。是否有另一個選項來獲得號碼?我不能使用xmlready或類似的東西,因爲我從API模塊中獲取XML作爲字符串。

+8

你應該使用XML解析器。 – SLaks 2013-02-26 16:00:45

回答

10

將XML作爲字符串使用並不妨礙您使用任何XML API。最容易使用的是XLinq API。它也應該在.NET 3.5中可用。

XDocument doc = XDocument.Parse(xml); 
string inquiryId = (string)doc.Root.Element("inquiry_id"); 
+0

事實上,直接刪除字符串應該更快,因爲XDocument首先解析xml。或者我錯了? – 2013-02-26 16:05:48

+0

@ FelixK:你可能是對的,但爲什麼要關心?這很可能不是性能瓶頸,並且使用XML解析器的代碼更加健壯和富有表現力。 – 2013-02-26 16:07:18

+0

你說得對。但是當你只是寫着「這是錯的,用這個。」操作者不知道如何正確使用這些方法。 :-) – 2013-02-26 16:09:57

0

如果你還是想用繩子像這樣的工作可能會奏效

responseXML.Substring(responseXML.IndexOf("<inquiry_id>"), responseXML.IndexOf("</inquiry_id>")) 

但在你的情況下使用XML API是一個更簡潔的方法。

-1

C#支持stringVariable.Replace(string,string),它將用第二個字符串替換所有出現的第一個字符串。

string responseXML; 
string inc_number = 
    responseXML.Replace("<inquiry_id>", string.Empty).Replace("</inquiry_id>", string.Empty); 

但是您仍然需要處理其餘的XML。 XML解析器更適合您的需求,我認爲。

+1

這不會返回預期結果 - 即「INC000000087930」。 – 2013-02-26 16:08:09

0

如果您只想查詢_id,您可以使用正則表達式。

string your_xml = @"<incident_response> 
<msg_id>50889_360</msg_id> 
<inquiry_id>INC000000087930</inquiry_id> 
<response_dt>02.26.2013 14:49:12</response_dt> 
<status>0</status> 
<error></error> 
</incident_response>"; 


Regex re = new Regex(@"<inquiry_id>(?'inquiry_id'.*?)</inquiry_id>"); 
MatchCollection mc = re.Matches(your_xml); 
foreach (Match m in mc) 
{ 
    MessageBox.Show(m.Groups["inquiry_id"].Value); 
} 
+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2013-02-26 16:10:10

+1

@DanielHilgarth也許你不能解析**每個** XML,但是他給我們的片段,可以在正則表達式的幫助下解決沒有問題。那他爲什麼不用它呢? – netblognet 2013-02-26 16:13:35

+1

因爲有解析XML的工具。爲什麼不使用它們呢? – 2013-02-26 16:14:45

-1

試試這個:

string str = "ggAAAff"; 
string prefix = "gg"; 
string suffix = "ff"; 
if (str.EndsWith(suffix)) str = str.Substring(0, str.Length - suffix.Length); 
if (str.StartsWith(prefix)) str = str.Substring(prefix.Length);