我有一个字符串[XML],我想查找包含一个单词的标签,然后用另一个名称替换该标签。
我尝试使用此方法,但没有成功:
var regex = new Regex(@"\bKeyValueOfstringOutcome\b", RegexOptions.IgnoreCase);
string result = regex.Replace(xml.Document.ToString(), "");
这是我的XML:
<Response>
<Outcome>
<KeyValueOfstringOutcomeTest1>
<Key>Icon</Key>
<Value>
<DataType>System.String</DataType>
<Field>Icon</Field>
<Value>O</Value>
</Value>
</KeyValueOfstringOutcomeTest1>
<KeyValueOfstringOutcomeTest2>
<Key>IconDescription</Key>
<Value>
<DataType>System.String</DataType>
<Field>IconDescription</Field>
<Value>Old</Value>
</Value>
</KeyValueOfstringOutcomeTest2>
<KeyValueOfstringOutcomeTest3>
<Key>IconLongDescription</Key>
<Value>
<DataType>System.String</DataType>
<Field>IconLongDescription</Field>
<Value>Older</Value>
</Value>
</KeyValueOfstringOutcomeTest3>
</Outcome>
</Response>
我需要找到包含KeyValueOfstringOutcome的节点,并将KeyValueOfstringOutcomeTest1,KeyValueOfstringOutcomeTest2,KeyValueOfstringOutcomeTest3替换为KeyValueOfstringOutcome。
答案 0 :(得分:0)
如果有帮助,请尝试此操作。
string result = Regex.Replace(xml.Document.ToString(), "[a-zA-Z0-9]*KeyValueOfstringOutcome[a-zA-Z0-9]*","KeyValueOfstringOutcome");
答案 1 :(得分:0)
如果我正确地理解了您想要摆脱Test1
,Test2
等的问题。
我建议使用此Replace方法。
string replacedXML = Regex.Replace(xml.Document.ToString(),
@"KeyValueOfstringOutcomeTest\d+",
"KeyValueOfstringOutcome");
\d+
将匹配出现在关键字后面的1个或多个数字
答案 2 :(得分:0)
我不会使用REGEX
来匹配和更改节点的名称。
如果您曾经更新文件或命名,它将崩溃或更改包含流行语的其他节点。
因此,我将在要更改的lvl /层次结构中通过每个childnode
创建一个循环,然后对其进行抓取并重命名。
foreach (XmlNode node in doc.ChildNodes)
{
// [2] should be the the deepth of childenotes named `KeyValueOfstringOutcomeTestX`
node.ChildNode[2].Name = "YOUR NEW NAME TO THIS NODE";
}
doc.Save(); // Change renamed nodes to the document.
答案 3 :(得分:0)
使用xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication107
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
List<XElement> keyValueOfstringOutcomeTests = doc.Descendants().Where(x => x.Name.LocalName.StartsWith("KeyValueOfstringOutcomeTest")).ToList();
foreach (XElement keyValueOfstringOutcomeTest in keyValueOfstringOutcomeTests)
{
keyValueOfstringOutcomeTest.ReplaceWith(new XElement("KeyValueOfstringOutcomeTest", keyValueOfstringOutcomeTest.Elements()));
}
}
}
}
答案 4 :(得分:0)
这就是我要做的。
var match = Regex.Match(xml.Document.ToString(), @"KeyValueOfstringOutcome.*>");
if (match.Success)
{
var replacedText = Regex.Replace(xml.Document.ToString(), @"KeyValueOfstringOutcome.*>", "KeyValueOfstringOutcome>");
}