2013-07-09 95 views
0

我需要知道如何删除数字签名标签。它是一个笼罩数字签名从xml文件中删除数字签名标签

我的XML文件看起来像下面

<?xml version="1.0" encoding="utf-8" ?> 
<questionset> 
    <question category="graph" /> 
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
    </SignedInfo> 
</Signature> 
</questionset> 

我想出头

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.PreserveWhitespace = false; 
xmlDoc.Load(new XmlTextReader(Doc)); 
XmlNode rnode = xmlDoc.SelectSingleNode("questionset/Signature"); 
XmlNode parent = rnode.ParentNode; 
parent.RemoveChild(rnode); 
string newXML = xmlDoc.OuterXml; 
XmlTextWriter xmlWriter = new XmlTextWriter(filename2, new UTF8Encoding(false)); 
xmlDoc.WriteTo(xmlWriter); 
xmlWriter.Close(); 

但rnode返回空值..

,我使用LINQ

尝试
XElement document = XElement.Load(Doc); 
XElement signElement = document.Descendants("Signature").FirstOrDefault<XElement>(); 
signElement.Remove(); 

这里也signElement返回空值..所以两个都没有工作。有人告诉我我错了什么地方,或者你可以告诉我正确的方法来删除数字签名。

回答

1
XElement document = XElement.Load(Doc); 

IEnumerable<XElement> signElements = document.Descendants("questionSet").Elements("Signature"); 

会给你你想要删除的元素。在这种情况下,"Signature"

然后调用Remove()

document.Descendants("questionSet").Elements("Signature").Remove(); 

然后保存XML回到一个文件,如果需要的;

doc.Save("output.xml"); 

查看MSDN Remove()了解更多详情。

而且,你的LINQ to XML查询

XElement signElement = document.Descendants("Signature").FirstOrDefault<XElement>(); 

会获得“签名”的后代/孩子再集合中返回的第一个项目。所以你会得到第一个“SignedInfo”节点。

+0

新的xml文件已创建,但标签未被删除.. –

+0

发布一个有效的xml,我们将测试它。 –

+0

发布了有效的xml ... –