String.Split 无法获取值

Posted

技术标签:

【中文标题】String.Split 无法获取值【英文标题】:String.Split not working to get values 【发布时间】:2017-04-20 15:21:54 【问题描述】:

我有一个作为字符串变量传递给我的 XML。我想从该 XML 中获取特定标签的值。以下是我拥有的 XML 以及我想要实现的目标:

<code>
string xmlData = @"  
<HEADER>
    <TYPE>AAA</TYPE>
    <SUBTYPE>ANNUAL</SUBTYPE>
    <TYPEID>12345</TYPEID>
    <SUBTYPEID>56789</SUBTYPEID>
    <ACTIVITY>C</ACTION>
</HEADER>";

var typeId = data.Split("<TYPEID>")[0];      //Requirement
var activity = data.Split("<ACTIVITY>")[0];  //Requirement
</code>

我知道 string.Split();在这里不起作用,因为它只需要一个字符。其他替代方法是使用正则表达式,这对我来说似乎有点威胁。虽然我尝试过使用它,但没有得到想要的结果。有人可以帮忙处理正则表达式代码吗?

【问题讨论】:

你为什么不能只解析 XML,把它变成一个对象? 我无法更改代码。它已作为字符串参数传递给方法,我必须使用该变量。运气不好:( &lt;ACTIVITY&gt;&lt;/ACTION&gt; 唯一不匹配的标签吗? 【参考方案1】:

您应该使用 XML Parsing 来获取值,但由于您尝试从字符串而不是字符中拆分字符串,因此您可以选择

string typeId = xmlData.Split(new string[]  "<TYPEID>" , StringSplitOptions.None)[1];
string typeIdVal = typeId.Split(new string[]  "</TYPEID>" , StringSplitOptions.None)[0];

使用 XML Parsing 看起来非常整洁

XmlDocument xmlDoc= new XmlDocument(); 
xmlDoc.Load("yourXMLFile.xml"); 

XmlNodeList XTypeID = xmlDoc.GetElementsByTagName("TYPEID");
string TypeID = XTypeID[0].InnerText;

你也可以像选择SubString一样

string typeidsubstr = xmlData.Substring(xmlData.IndexOf("<TYPEID>") + 8, xmlData.IndexOf("</TYPEID>") - (xmlData.IndexOf("<TYPEID>") + 8));

我使用+8是因为&lt;TYPEID&gt;的长度是8,你也可以选择它string.length来评估结果。

【讨论】:

是的,使用 XML 会容易得多,但我无法更改现有代码。我必须在该代码中注入新功能。感谢您的代码,它就像魅力一样。 :) 但是使用第一种方法 xmlData.Split() 选项给出“索引超出范围”异常。有什么想法吗?【参考方案2】:

您可以使用 XML Linq 对象来解析这些。

注意:ACTIVITY 元素中有错字,结束标签应该是 /ACTIVITY,而不是 /ACTION! (我在下面更正了)

string xmlData = @"<HEADER>
                <TYPE>AAA</TYPE>
                <SUBTYPE>ANNUAL</SUBTYPE>
                <TYPEID>12345</TYPEID>
                <SUBTYPEID>56789</SUBTYPEID>
                <ACTIVITY>C</ACTIVITY>
            </HEADER>";

            var doc = XDocument.Parse(xmlData);

            var typeId = doc.Root.Elements("TYPEID").First().Value;
            var activity = doc.Root.Elements("ACTIVITY").First().Value;

【讨论】:

以上是关于String.Split 无法获取值的主要内容,如果未能解决你的问题,请参考以下文章

Java String split(“|”)方法调用无法正常工作[重复]

|在 java string.split() 方法中无法识别[重复]

为啥 String.split 需要转义管道分隔符?

C#学习教程:LINQ to Entities无法识别方法’System.String Split(Char )’方法

Java String split 删除了空值

js 截取给定字符后面的字符