[英]Replace a string in an XML string
我有一个看起来像这样的字符串:
newNodeXML = "<item id="qDf73w8emTg" parent_id="weLPzE243de" type="suite">
<content>
<name>Three</name>
</content>
</item>"
在我的[WebMethod]中 ,我试图像这样替换parent_ID(在运行时随机生成):
Regex myRegex = new Regex(@""" parent_id=""(.*?)"" type=""");
newNodeXML = myRegex.Replace(newNodeXML, "d43df2qT45");
请注意,出于示例/演示目的,我在上面的第二行中使用了“ d43df2qT45”。 我实际上也会随机生成。
我的问题是,结果出来了。 我不想要这样:
<item id="qDf73w8emTgd43df2qT45suite">
<content>
<name>Three</name>
</content>
</item>
相反,这就是我想要的 :
<item id="qDf73w8emTg" parent_ID="d43df2qT45" type="suite">
<content>
<name>Three</name>
</content>
</item>
附言:我已经尝试了一些例子/谷歌搜索,而我所能找到的都是使我走到现在的例子。
如果您具有已知的XML结构,则使用XML工具可能比使用refex更好,而且速度也更快。 例如:
var doc = XDocument.Parse(newNodeXML);
doc.Root.Attribute("parent_id").Value = "xyz";
此代码取决于您提供的确切结构。 因此,只有一个item
,它是XML文件的根,并且具有一个名为parent_id
的属性。
有关MSDN上XDocument
类型的更多信息。
由于您已经对所有内容进行了硬编码,因此实际上不需要使用捕获组的内容。
只需将替换扩展到此:
"\" parent_id=\"" + "d43df2qT45" + "\" type=\""
您可以尝试一下,我对其进行了测试,它似乎可以工作:
String newXml = Regex.Replace(xml, "parent_id=\".+\" ", "parent_id=\"" + newID + "\" ");
这是测试它的示例方法:
String xml = "<item id=\"qDf73w8emTg\" parent_id=\"weLPzE243de\" type=\"suite\">\n\t<content>\n\t\t<name>Three</name>\n\t</content>\n</item>";
String newID = "This is the new parent_Id";
Console.WriteLine("Old xml: \n\n" + xml + "\n\n\nNew xml:\n");
String newXml = Regex.Replace(xml, "parent_id=\".+\" ", "parent_id=\"" + newID + "\" ");
Console.WriteLine(newXml);
Console.ReadKey();
只需将其粘贴到控制台应用程序的main方法中,并包含RegularExpression库即可:)
您可以使用正则表达式使用正则表达式,如下所示。
Regex myRegex = new Regex("parent_id=\"([^""]+)\");
string myXml = "<myxml>data</myxml>";
xdoc.LoadXml(myXml);
您可以使用括号来捕捉值前后的部分,然后使用$1
和$2
将它们包括在替换中:
Regex myRegex = new Regex(@"( parent_id="")[^""]+("")");
newNodeXML = myRegex.Replace(newNodeXML, "$1" + "d43df2qT45" + "$2");
您也可以只使用字符串操作来做到这一点:
int pos1 = newNodeXML.IndexOf(" parent_id=\"") + 12;
int pos2 = newNodeXML.IndexOf('"', pos1);
newNodeXML = newNodeXML.Substring(0, pos1) + "d43df2qT45" + newNodeXML.Substring(pos2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.