我正在将一个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。
答案 0 :(得分:0)
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));
}
}
}