正在从xml文件中删除数字签名标记

本文关键字:删除 数字签名 文件 xml | 更新日期: 2023-09-27 18:21:32

我需要知道如何删除数字签名标签。它是一个封装的数字签名

我的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返回了null值。。

我试着用Linq

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

这里还有signElement返回了null值。。所以两者都不起作用。有人能告诉我哪里出了问题吗?或者你能告诉我删除数字签名的正确方法吗。

正在从xml文件中删除数字签名标记

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到XML查询

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

会得到"Signature"的后代/子代,然后返回集合中的第一个项目。因此,您将获得第一个"SignedInfo"节点。