String.Split无法获取值

时间:2016-12-06 04:12:24

标签: c# regex xml string split

我有一个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();不在这里工作,因为它只需要一个字符。其他替代方法是使用正则表达式,这对我来说似乎有点威胁。虽然我试图使用它,但没有得到理想的结果。有人可以帮助使用正则表达式代码吗?

2 个答案:

答案 0 :(得分:1)

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

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,因为<TYPEID>的长度是8,你也可以选择它来搜索string.length来评估结果。

答案 1 :(得分:1)

您可以使用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;