我有两个序列化的XML对象,如:
<car id="1">
<name>Renault</name>
<type>
<gear>Manual</gear>
<petrol>Gas</petrol>
<model>11</model>
</type>
<status>Available</status>
</car>
另一个只是一个标签:
<type>
<gear>Automatic</gear>
</type>
我想用第二个对象中的节点替换第一个对象的类型节点。
我试过了:
string output = Regex.Replace(input, @"<type>(.*)</type>", replacement, RegexOptions.IgnoreCase);
但它没有提供所需的输出。有什么建议?
答案 0 :(得分:0)
您可以XmlDocument
:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<car id=\"1\"><name>Renault</name><type><gear>Manual</gear><petrol>Gas</petrol><model>11</model></type><status>Available</status></car>");
var typeNode = xmlDoc.SelectSingleNode("descendant::car[@id='1']/type");
if (typeNode != null) typeNode.InnerText = "<gear>Automatic</gear>";
string str = xmlDoc.InnerXml;
答案 1 :(得分:0)
你可以使用你自己的子串函数,比如这个
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(NodeReplace(xml, "type",value));
}
public string NodeReplace(string xml, string nodeToFind, string newValue)
{
int start = xml.IndexOf("<" + nodeToFind);
int end = xml.IndexOf("</" + nodeToFind + ">");
string toreplace = xml.Substring(start, end + 3 + (nodeToFind.Length) - start);
xml = xml.Replace(toreplace, newValue);
return xml;
}
但是如果你想要一个推荐,我认为最好用类来序列化并简单地将你的节点替换为变量