将 TinyXml2 代码移植到 C# XmlDocument 以替换元素中的文本值
Porting TinyXml2 code to C# XmlDocument to replace text values in elements
使用 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 然后保存是吗?
谢谢。
您可以查看此文档以获取更多信息: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")
。
使用 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 然后保存是吗?
谢谢。
您可以查看此文档以获取更多信息: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")
。