2

XMLノードを取得するための最速の方法は何ですか?特定のノードを置き換える機能を必要とするアプリケーションがあります。ドキュメントが小さい場合は高速ですが、すぐに大きくなり、置換を行うのに数秒かかります。これが方法です。私はブルートフォース比較を行うだけで、そのシナリオでは非常に悪い結果になります。

public bool ReplaceWithAppendFile(string IDReplace)
{
    XElement UnionElement = (from sons in m_ExtractionXmlFile.Root.DescendantsAndSelf()
                             where sons.Attribute("ID").Value == IDReplace
                             select sons).Single();
    UnionElement.ReplaceWith(m_AppendXmlFile.Root.Elements());
    m_ExtractionXmlFile.Root.Attribute("MaxID").Value =
        AppendRoot.Attribute("MaxID").Value;
    if (Validate(m_ExtractionXmlFile, ErrorInfo))
    {
        m_ExtractionXmlFile.Save(SharedViewModel.ExtractionFile);
        return true;
    }
    else
    {
        m_ExtractionXmlFile = XDocument.Load(SharedViewModel.ExtractionFile);
        return false;
    }
}
4

1 に答える 1

2

XPathを使用してみてください:

string xPath = string.Format("//*[@id='{0}']", IDReplace);
XElement UnionElement = m_ExtractionXmlFile.XPathSelectElement(xPath);

その他の例については、XPathを使用したDOMドキュメント内の属性による要素の検索を参照してください。

PSパラメータとローカル変数の名前を小文字で始めるのは良い慣習と考えられています。したがって、上記ではなく、を使用idReplaceしてください。unionElement

于 2012-01-20T22:05:50.173 に答える