所以我最终要做的是解析 XML 并将元素值添加到包含在 cdata 部分中的元素。我在 xml 中搜索 cdata 部分,将其拉出并将其加载到另一个 xdocument 中以保留 xml 结构,然后添加元素值,但现在我不确定如何将其添加回原始 xml原来的位置。
这是原始 XML:
<OUTPUT version="2.0"><RESPONSE><DATA state="FL" city="Sarasota">
<![CDATA[<LION xmlns="http://www.com" version="5.050">
<COMMENTS>
<PLACES>
Forest under a tree
</PLACES></COMMENTS></LION>]]>
</DATA></RESPONSE></OUTPUT>
我搜索 cdata 部分并插入如下元素值:
XDocument value = XDocument.Parse(returnValue);
RegexOptions options = RegexOptions.None;
Regex regex = new Regex(@"\<\!\[CDATA\[(?<text>[^\]]*)\]\]\>", options);
bool isMatch = regex.IsMatch(returnValue);
if(isMatch)
{
Match match = regex.Match(returnValue);
string HTMLtext = match.Groups["text"].Value;
XDocument cdata = XDocument.Parse(HTMLtext);
XNamespace ns = @"http://www";
var com = cdata.Descendants(ns + "COMMENTS").First();
var dcomm = com.Element(ns + "PLACES");
dcomm.Value = "test"+ dcomm.Value;
我剩下的是附加回 cdata 文本,因为将正则表达式转换为字符串已删除,然后将其放回原始 xml 中 cdata 的位置。