替换XML节点/字符串

时间:2018-02-17 10:14:24

标签: c#

我有两个序列化的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);

但它没有提供所需的输出。有什么建议?

2 个答案:

答案 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;
    }

但是如果你想要一个推荐,我认为最好用类来序列化并简单地将你的节点替换为变量