2012-04-18 6 views
0

私は別のプロジェクトに入るプロジェクトに取り組んでいます。私が掘り下げているプロジェクトでは、に変更できない奇妙なXML構文が生成されます。XMLを正規表現で解析することはこれまで適切でしたか?

それは私が必要なもの

<DocumentRoot> 
    <Parent> 
     <Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times> 
     <Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938> 
     <Weird-Elt_84509843323232> Data I need </Weird-Elt_84509843323232> 

    </Parent> 
    <Parent> 
     <Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times> 
     <Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938> 
    </Parent> 
    <Parent> 
     <Child-Which-Can-Occur-Random-Number-Of-Times> Data </Child-Which-Can-Occur-Random-Number-Of-Times> 
     <Weird-Elt_12309843028938> Data I need </Weird-Elt_12309843028938> 
    </Parent> 
</DocumentRoot> 

を説明するために、奇妙な要素を持っている:「奇妙な-ELT」タグの名前を、そしてそれが内容です。

問題:XMLは変更できません。奇妙な要素は、その上にある要素のように、ランダムな回数だけ発生することがあります。Child-Which-Can-Occur-Random-Number-Of-Times

私が見ることができる唯一の解決策は、正規表現と組み合わせてXMLにLinqを使用してWeird-Eltの名前と一致させることです。

私はこの中にいるのですか?

+0

を試してみてくださいあなたのXMLを 'XML parser 'で解析できない場合、あなたの設計に欠陥があります。 – Msonic

+2

http://stackoverflow.com/a/1732454/63011 XMLにも同じことが当てはまります。 –

+0

いいえ、正規表現は必要ありません。 "親" .lastChildにアクセスするのはどうですか? – Bergi

答えて

3

はい、正しいです。 RegularExpressionでLinq to SQLを使用する必要があります。ここにサンプルがあります。

Regex regEx = new Regex("Weird-Elt_.*", RegexOptions.Compiled); 

XDocument doc = XDocument.Parse(xml1); 
var x1 = from e in doc.Descendants("Parent").Descendants() 
     where regEx.IsMatch(e.Name.LocalName) 
     select e; 

希望します。

+2

またはe.Name.LocalName.StartsWith – user1096188

+0

を使用することはできますが、このソリューションは動作しますが、string.StartsWithはRegex.IsMatchよりもはるかに高速です。 – jessehouwing

4
var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[starts-with(name(),'Weird-Elt_')]"); 

名は常に奇妙な-Elt_で起動しない場合は、なぜ、構文を変更することはできないのですか?contains

var nodeList = xmlDoc.DocumentElement.SelectNodes("//*[contains(name(),'Weird-Elt_')]"); 
+0

必ずしも奇妙なことから始まるとは限りません!申し訳ありませんが、私はこれを明らかにすべきです:) –

関連する問題