使用c#无法在签名的XML文件中读取/查找节点

时间:2012-10-14 23:09:34

标签: c# xml

String fileName = "signed_file.xml";
      String filecopy = "signed_file_copy.xml";


       File.Copy(fileName, filecopy, true);

        /* Remove the digital signature */
        XDocument doc1 = XDocument.Load(filecopy);

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

        signElement.Remove();

signElement为null,即使signed_file_copy.xml具有 签名标签。需要帮助来了解正在发生的事情。

XML中的Signature标记结构如下所示

<Config>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
 <SignedInfo>
  <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  <SignatureMethod Algorithm=xxxxxxxxx /> 
  <Reference URI="">
  <Transforms>
  <Transform Algorithm=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz /> 
  </Transforms>
  <DigestMethod Algorithm=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy /> 
  <DigestValue> xxxxxxxxxxx </DigestValue> 
  </Reference>
  </SignedInfo>
  <SignatureValue>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</SignatureValue> 
</Signature>
</Config>

1 个答案:

答案 0 :(得分:4)

试试这个:

XElement signElement =
    doc1
        .Descendants(
            XName.Get("Signature", "http://www.w3.org/2000/09/xmldsig#"))
        .FirstOrDefault();

您的Signature标记有一个命名空间,因此您必须使用它来查找该元素。