我有一个XML格式的字符串,(这不是格式良好的XML!)我希望获得字段和值
<MYXML
address="rua sao carlos, 128" telefone= "1000-222" service="xxxxxx" source="xxxxxxx" username="aaaaaaa" password="122222" nome="asasas" sobrenome="aass" email="sao.aaaaa@aaaaa.com.br" pais="SS" telefone="4002-" />
我想在分割中获得参数和值。
我试试这个:
xml.ToString().Replace(" =" , "=").Replace("= " , "=").Replace(" = " , "=").Split(new char[]{' '});
但不是完美的工作因为例如属性'地址'分为两个项目
{string[29]}
[0]: "<signature"
[1]: "aaa=\"xxxx\""
[2]: "sss=\"xxxx\""
[3]: "ssss=\"xxx\""
[4]: "username=\"xxx\""
[5]: "password=\"xxxx\""
[6]: "nome=\"xxxx\""
[7]: "sobrenome=\"xxx\""
[8]: "email=\"xxx.xxx@xxx.com.br\""
[9]: "pais=\"BR\""
[10]: "endereco=\"Rua"
[11]: "Sao"
[12]: "Carlos,"
[13]: "128\""
[14]: "cidade=\"Sao"
[15]: "Paulo\""
错误是
[10]: "endereco=\"Rua"
[11]: "Sao"
[12]: "Carlos,"
如果我想要的是正确的
[10]: "endereco=\"Rua Sao Carlos , 128"
答案 0 :(得分:1)
当您处理格式错误的xml时,正则表达式将适用于此。
Regex regex = new Regex("\\s\\w+=\"(\\w|\\s|,|=|@|-|\\.)+\"");
MatchCollection matches = regex.Matches(searchText);
foreach (var match in matches)
{
//your code here
}
使用您的示例字符串进行测试,匹配符合预期。 希望这有帮助!
答案 1 :(得分:0)
我建议你使用xPath或Linq来解析这个xml。你使用的方式不是一个好方法,这就是你最终出错的原因。“Rua Sao Carlo”包含三个单词空格分隔的单词;因此,当您尝试使用单个空格拆分它时,它也会拆分地址
答案 2 :(得分:0)
如前所述,您的XML格式很糟糕。如果您要修复它,通过重命名或删除电话属性,您可以像这样分解XML:
这是处理XML的正确方法,如果你无法控制获取正确的xml并且必须使用w / junk,我建议@AFrieze使用正则表达式答案。
var xmlString = @"<MYXML address=""rua sao carlos, 128"" service=""xxxxxx"" source=""xxxxxxx"" username=""aaaaaaa"" password=""122222"" nome=""asasas"" sobrenome=""aass"" email=""sao.aaaaa@aaaaa.com.br"" pais=""SS"" telefone=""4002-"" />";
var xml = XDocument.Parse(xmlString);
var values = xml.Descendants("MYXML").SelectMany(x => x.Attributes()).ToArray();
foreach (var value in values)
{
Console.WriteLine(value);
}
Console.Read();
返回:
address="rua sao carlos, 128"
service="xxxxxx"
source="xxxxxxx"
username="aaaaaaa"
password="122222"
nome="asasas"
sobrenome="aass"
email="sao.aaaaa@aaaaa.com.br"
pais="SS"
telefone="4002-"
答案 3 :(得分:0)
尝试Split
的{{3}}重载。它允许您使用字符串作为拆分器令牌,即'" '
(即引用和空格)。这将拆分为名称和属性对。然后获取结果数组,并在=
(等于)上再次拆分以获得所需的对,然后按照您的意愿进行操作。希望这能让你朝着正确的方向前进