2013-02-26 86 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);