2017-01-14 3 views
2

Использование TinyXml2 можно изменить текстовое значение всех элементов, как это:Портирование TinyXml2 код C# XmlDocument заменить текстовые значения в элементах

void CAssignHistoryDlg::UpdateNameAssignHistXML(tinyxml2::XMLElement* pElement, CString strExistingName, CString strReplacementName) 
{ 
    TIXMLASSERT(pElement); 

    USES_CONVERSION; 

    if (pElement != NULL) 
    { 
     CString strText(CA2CT(pElement->GetText(), CP_UTF8)); 
     if (strText.CollateNoCase(strExistingName) == 0) 
      pElement->SetText(CT2CA(strReplacementName, CP_UTF8)); 
    } 

    for (tinyxml2::XMLElement* pChildElement = pElement->FirstChildElement(); pChildElement != NULL; pChildElement = pChildElement->NextSiblingElement()) { 
     UpdateNameAssignHistXML(pChildElement, strExistingName, strReplacementName); 
    } 
} 

Но если я использую C# и XmlDocument вместо хау я иду об одном и том же? Я просто хочу прочитать XML-файл, найти любые элементы, где текстовое значение AAA и заменить его на BBB, а затем сохранить его?

спасибо.

ответ

1

Вы можете проверить этот документ для получения дополнительной информации: https://msdn.microsoft.com/en-us/library/system.xml.linq.xelement(v=vs.110).aspx

var doc = 
    new XElement("root", 
     new XElement("first", "old"), 
     new XElement("Second", 
      new XElement("Third", "old") 
     ) 
    ); 

string oldValue = "old"; 
string newValue = "new"; 

ReplaceValue(doc, oldValue, newValue); 

и определение метода, как:

public void ReplaceValue(XElement element, string oldValue, string newValue) 
{ 
    if (element.HasElements) 
    { 
     foreach (var elem in element.Descendants()) 
     { 
      ReplaceValue(elem, oldValue, newValue); 
     } 
    } 
    else if (element.Value == oldValue) 
    { 
     element.Value = newValue; 
    } 
} 

Для чтения файла в XElement, используйте XElement.Load("C:\\file.xml"), а также для экономии использования XElement.Save("C:\\file.xml") ,

+0

спасибо. Итак, как мы читаем XML-файл с ПК в этот «XElement»? А потом после операции сохранить его? Спасибо. –

+1

@AndrewTruckle Я отредактировал сообщение. –

+0

Спасибо. Для вашего первого 'if (doc.Value == oldValue)', что именно он проверяет? Корневой узел? –

Смежные вопросы