使用XmlDictionaryReader的c#代码

本文关键字:代码 XmlDictionaryReader 使用 | 更新日期: 2023-09-27 18:11:04

我正在将xml文档接收到WCF服务中,并希望验证文档中的特定元素/属性。我可以验证内容正在被读入:-

using (XmlDictionaryReader reader = message.GetReaderAtBodyContents())
{
    string content = reader.ReadOuterXml();
}

但是,我现在想获得XML中特定属性和元素的值。我尝试过reader.GetAttribute("name", "namespace")reader.ReadToFollowing,然后是reader.ReadElementContentAsString,但值始终是null。我做错了什么?


我试过各种

的组合
string test1 = reader.GetAttribute("retry_number", "ns1 location");
string test2 = reader.GetAttribute("ns1:retry_number", "ns1 location");

XML将不同名称空间中的元素定义为<ns1:retry_number>1</ns1:retry_number>,其中ns1已被声明。

尝试的其他代码是:

reader.ReadToFollowing("ns1:retry_number"); 
string test3 = reader.ReadElementContentAsString()
reader.ReadToFollowing("ns1:retry_number");
reader.MoveToFirstAttribute();
string test4 = reader.Value;

首先,我想要一些成功的读取元素,然后转移到属性。测试变量总是设置为null,尽管在第一步中,当我读取外部XML时,我可以在内容变量中看到XML。

使用XmlDictionaryReader的c#代码

希望这篇文章对你有所帮助

using (var xmlReader = requestMessage.GetReaderAtBodyContents())
            {
                // Find the element for the operation's data
                xmlReader.ReadStartElement(operation.Name, operation.Contract.Namespace);
                for (int i = 0; i < parameters.Length; i++)
                {
                    var parameterName = parameters[i].GetCustomAttribute<MessageParameterAttribute>()?.Name ?? parameters[i].Name;
                    xmlReader.MoveToStartElement(parameterName, operation.Contract.Namespace);
                    if (xmlReader.IsStartElement(parameterName, operation.Contract.Namespace))
                    {
                        var serializer = new DataContractSerializer(parameters[i].ParameterType, parameterName, operation.Contract.Namespace);
                        arguments.Add(serializer.ReadObject(xmlReader, verifyObjectName: true));
                    }
                }
            }