将TinyXml2代码移植到C#XmlDocument以替换元素中的文本值

时间:2017-01-14 14:13:07

标签: c# xmldocument

使用 TinyXml2 我可以更改所有元素的文本值,如下所示:

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 个答案:

答案 0 :(得分: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")