如何删除XElement的CDATA标签?
问题描述:
我有一些接收一些XML的代码,并且存在CDATA标记元素存在的可能性。一个标志被传递到方法中,说明CDATA标签是否应该存在,如果标志为false,那么CDATA标签应该被删除(如果存在),我将如何做到这一点而不解析查询。值?如何删除XElement的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???
}
}
答
试试这个:
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);
你为什么要删除它?事实上,你为什么操纵CDATA呢? – 2010-08-25 21:27:47
这是一个XML编辑工具。这不是我们操纵CDATA,这个工具是操纵CDATA的门户药物。 – Eric 2010-08-25 21:45:36