我有一些接收一些XML的代码,并且可能存在CDATA标记元素。将一个标志传递给方法,该方法指出CDATA标签是否应该存在,如果标志为false,则应该删除CDATA标签(如果存在),如何在不解析查询的情况下执行此操作。值?
private static void CDataTagUtility(XmlDocument catalog, XElement newData, bool addCdataTag)
{
XElement query = newData.Element("Query").Element("CommandText");
if (addCdataTag)
{
XmlCDataSection encapsulatedQuery = catalog.CreateCDataSection(query.Value);
try
{
query.SetValue(encapsulatedQuery.OuterXml);
}
catch (ArgumentException exc) { /*Thrown due to CDATA tag already present - ignore*/ }
}
else //check for cdata tag - remove if present
{
//How do I remove the CDATA encapsulation tag???
}
}
答案 0 :(得分:1)
试试这个:
static void RemoveCdata(XmlNode root)
{
foreach (XmlNode n in root.ChildNodes)
{
if (n.NodeType == XmlNodeType.CDATA)
root.RemoveChild(n);
else if (n.NodeType == XmlNodeType.Element)
RemoveCdata(n);
}
}
...
RemoveCdata(query);