繁体   English   中英

替换XML字符串中的字符串

[英]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的属性。

有关MSDNXDocument类型的更多信息。

由于您已经对所有内容进行了硬编码,因此实际上不需要使用捕获组的内容。
只需将替换扩展到此:

"\" 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM