使用XmlDictionaryReader的C#代码

时间:2014-06-30 20:10:33

标签: c# xml

我正在将一个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。

1 个答案:

答案 0 :(得分:0)

I hope this article helps you

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));
                    }
                }
            }