如何使用XmlDictionaryWriter在两个XML标记之间放置一个值并为XML元素的名称加上前缀?

本文关键字:XML 元素 前缀 一个 XmlDictionaryWriter 何使用 两个 之间 | 更新日期: 2023-09-27 17:50:34

我正在尝试生成以下XML:

<wsse:Security>
  <wsse:BinarySecurityToken
  ValueType="Bibble"
  EncodingType="wsse:Base64Binary"
  wsu:Id="SecurityToken ">
    Fish
  </wsse:BinarySecurityToken>
</wsse:Security>

我的代码是:

protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
    writer.WriteStartElement("wsse", "Security" ,Namespace);
    writer.WriteXmlnsAttribute("wsse", Namespace);
}
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
    writer.WriteStartElement("wsse", "BinarySecurityToken", Namespace);
    writer.WriteAttributeString("ValueType", "Bibble");
    writer.WriteAttributeString("EncodingType", "wsse:Base64Binary");
    writer.WriteEndElement();
}

问题1:我不知道如何把Fish的值放在开始和结束标签之间。

问题2:我不知道如何获得wsu:Id元素,因为这段代码生成了一个异常:writer.WriteAttributeString("wsu:Id", "SecurityToken");

任何想法?

如何使用XmlDictionaryWriter在两个XML标记之间放置一个值并为XML元素的名称加上前缀?

问题1:

我似乎找不到XmlDictionaryWriter,但我相信你需要 writer.WriteValue("Fish");

问题2:

使用其他重载之一:

writer.WriteAttributeString("wsu", "Id", wsu_namespace_string, "SecurityToken");

其中wsu_namespace_string包含WSU前缀的命名空间声明

OnWriteHeaderContents()中,在调用writer.WriteEndElement();之前,添加以下内容:

writer.WriteValue("Fish");

根据MSDN, WriteValue将接受一个字符串并简单地将其写出来。对于许多不同的CLR类型和object,还有其他重载。

那么,OnWriteHeaderContents()应该是这样的:

protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
    writer.WriteStartElement("wsse", "BinarySecurityToken", Namespace);
    writer.WriteAttributeString("ValueType", "Bibble");
    writer.WriteAttributeString("EncodingType", "wsse:Base64Binary");
    writer.WriteValue("Fish");//write Fish
    writer.WriteEndElement();
}