使用 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 ,然后保存它?
谢谢。
答案 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")
。