You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#更新XML中指定的DigestValue节点值?

C# 修改UBL XML中特定ds:DigestValue的解决方案

方法一:使用LINQ to XML(推荐)

LINQ to XML是C#中处理XML更简洁的方式,直接通过属性条件定位目标节点即可,无需额外添加ID。

步骤说明:

  • 声明XML命名空间(ds:前缀对应标准签名命名空间http://www.w3.org/2000/09/xmldsig#)
  • 加载XML文件或字符串
  • 通过属性条件筛选目标<ds:Reference>节点
  • 定位该节点下的<ds:DigestValue>并修改值

代码示例:

using System.Xml.Linq;

// 声明签名命名空间
XNamespace ds = "http://www.w3.org/2000/09/xmldsig#";

// 加载XML文件(也可用XElement.Parse处理XML字符串)
XDocument doc = XDocument.Load("your-ubl-document.xml");

// 筛选符合属性条件的<ds:Reference>节点
var targetReference = doc.Descendants(ds + "Reference")
    .FirstOrDefault(r => 
        r.Attribute("Type")?.Value == "http://www.w3.org/2000/09/xmldsig#SignatureProperties" 
        && r.Attribute("URI")?.Value == "#xadesSignedProperties");

if (targetReference != null)
{
    // 修改<ds:DigestValue>的值
    var digestValueNode = targetReference.Element(ds + "DigestValue");
    if (digestValueNode != null)
    {
        digestValueNode.Value = "你的新摘要字符串";
    }
    // 保存修改后的XML
    doc.Save("modified-ubl-document.xml");
}

方法二:使用XmlDocument(传统API)

如果习惯传统XmlDocument操作,可通过XPath结合命名空间管理器实现:

using System.Xml;

XmlDocument doc = new XmlDocument();
doc.Load("your-ubl-document.xml");

// 注册命名空间
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");

// 用XPath直接定位目标<ds:DigestValue>节点
string xpath = "//ds:Reference[@Type='http://www.w3.org/2000/09/xmldsig#SignatureProperties' and @URI='#xadesSignedProperties']/ds:DigestValue";
XmlNode digestNode = doc.SelectSingleNode(xpath, nsManager);

if (digestNode != null)
{
    digestNode.InnerText = "你的新摘要字符串";
    doc.Save("modified-ubl-document.xml");
}

关于添加ID字段的问题

可以给目标节点添加ID属性,但完全没必要——上述两种方法已经能通过现有属性精准定位节点,额外添加ID会增加XML修改步骤,反而复杂化流程。只有当XML结构极度复杂、属性条件无法唯一筛选节点时,才考虑用ID辅助定位。

内容的提问来源于stack exchange,提问作者Codinoz Technologies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:42:14