Какой самый быстрый способ получить узел XML по идентификатору - PullRequest
2 голосов
/ 21 января 2012

Какой самый быстрый способ получить узел 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;
    }
}

1 Ответ

2 голосов
/ 21 января 2012

Попробуйте использовать XPath:

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

Вы можете обратиться к Поиск элементов по атрибутам в документе DOM Использование XPath для получения дополнительных примеров.

PS Это считаетсяХорошее соглашение для запуска имен параметров и локальных переменных в нижнем регистре.Таким образом, используйте idReplace и unionElement вместо вышеуказанного.

...