XMLを解析するためにXmlDocumentを使用するコードを書き直しています。代わりにXmlReaderを使用して、パフォーマンスが向上するかどうかを確認します。 XMLの構造は次のようになります。XmlReaderクラスを使用して同じ名前の要素でXMLを解析する
<items>
<item id="1" desc="one">
<itemBody date="2012-11-12" />
</item>
<item id="2" desc="two">
<itemBody date="2012-11-13" />
</item>
<item id="3" desc="three">
<itemBody date="2012-11-14" />
</item>
<item id="4" desc="four">
<itemBody date="2012-11-15" />
</item>
</items>
基本的に、私はすべての<item>
の要素を反復処理する必要があります。私が言ったように、古いコードは次のように動作します。
XmlDocument document = new XmlDocument();
// load XML into XmlDocument
document.LoadXml(xml);
// use xpath to split into individual item
string xPath = @"items/item";
XmlNodeList nodeList = document.SelectNodes(xPath);
// loop through each item
for (int nodeIndex = 0; nodeIndex < nodeList.Count; nodeIndex++)
{
// do something with the XmlNode
nodeList[nodeIndex];
}
これは正常に動作しますが、私はしたXmlReaderを使用すると、より高速になると思います。だから私はこれを書いている:
XmlReader xmlReader = XmlReader.Create(new StringReader(xml));
while (xmlReader.Read())
{
if (xmlReader.Name.Equals("item") && (xmlReader.NodeType == XmlNodeType.Element))
{
string id = xmlReader.GetAttribute("id");
string desc = xmlReader.GetAttribute("desc");
string elementXml = xmlReader.ReadOuterXml();
}
}
しかし、このコードは、最初の<item>
の要素を読み込みます。 ReadOuterXml()はループを解除しています。誰かがこれを回避する方法を知っていますか?または、このタイプの解析はXmlReaderでは不可能ですか?私は、だから私は、LINQを使用することはできません。この使用して.NETバージョン2 :(を行うために持ってきた
最初の要素の後どうなりますか?何のデバッグをしましたか?元のコードは実際には遅すぎますか? (もっと速いものを作るのであれば、もっと難しいコードを書いてはいけません...) –
これは応答ではありませんが... xsd2codeを使いましたか? xmlをクラスにパースするのに非常に便利です –
これの戻り値は何ですか?新しいStringReader(xml).ReadToEnd() – laszlokiss88