我需要知道如何删除数字签名标签。它是一个有封面的数字签名
我的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返回空值..所以两者都没有工作。有人告诉我哪里出错了或者你能告诉我正确的方法来删除数字签名。
答案 0 :(得分: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>();
会得到“Signature”的后代/子项,然后返回集合中的第一个项目。所以你会得到第一个“SignedInfo”节点。