.net 如何克服XML不区分大小写的缺点
我有一个阅读xml文件的项目。它来自一个web服务。但它有时可能具有不同的属性 标准xml文件如下所示:.net 如何克服XML不区分大小写的缺点,.net,xml,vb.net,case-sensitive,.net,Xml,Vb.net,Case Sensitive,我有一个阅读xml文件的项目。它来自一个web服务。但它有时可能具有不同的属性 标准xml文件如下所示: <xml ....> <car carname="Opel">Opel </car> </xml> <xml ....> <car carName="Opel">Opel </car> </xml> 现在,当第二种类型的XML文
<xml ....>
<car carname="Opel">Opel
</car>
</xml>
<xml ....>
<car carName="Opel">Opel
</car>
</xml>
现在,当第二种类型的XML文件出现在我的代码中时,它爆炸了,因为没有带有“carName”的属性。
我如何支持像“carName”、“carName”、“carName”这样的carName变体
谢谢假设您使用的是Visual Basic.Net和XLinq: 我不确定这是不是正确的Visual Basic.Net-您可能需要在几个地方修复它
假设您使用的是Visual Basic.Net和XLinq: 我不确定这是不是正确的Visual Basic.Net-您可能需要在几个地方修复它
您不需要支持所有案例变体。XML区分大小写,这意味着
carName
和carName
是两个不同的属性。不能仅仅因为两个属性具有相似的名称就安全地假设它们是相同的
如果服务符合已发布的模式或DTD,那么您可以查看其中的内容以了解元素可能具有哪些属性
如果没有发布的模式,那么询问提供者是否有
如果根本没有使用模式,那么这种行为很可能不是故意的,您应该向web服务提供商提交一个bug
补遗
当需要carname
时,提供carname
与提供carame
、caarname
、canrame
、car\u name
或car name
是同一种错误。考虑到错误输入的所有可能变化,不能合理地期望服务正确响应。变化非常多。当给出错误的输入时,适当的措施是以信息性错误消息响应,允许另一端纠正错误
如果您明确希望支持某些已知的变体,如
carname
和carname
,那么请对您认为合理的变体进行支持,并为其他任何变体提供适当且信息丰富的错误消息。您不需要支持所有案例变体。XML区分大小写,这意味着carName
和carName
是两个不同的属性。不能仅仅因为两个属性具有相似的名称就安全地假设它们是相同的
如果服务符合已发布的模式或DTD,那么您可以查看其中的内容以了解元素可能具有哪些属性
如果没有发布的模式,那么询问提供者是否有
如果根本没有使用模式,那么这种行为很可能不是故意的,您应该向web服务提供商提交一个bug
补遗
当需要carname
时,提供carname
与提供carame
、caarname
、canrame
、car\u name
或car name
是同一种错误。考虑到错误输入的所有可能变化,不能合理地期望服务正确响应。变化非常多。当给出错误的输入时,适当的措施是以信息性错误消息响应,允许另一端纠正错误
如果您明确地希望支持某些已知的变体,例如
carname
和carname
,那么请对您认为合理的变体进行支持,并为其他任何内容提供适当且信息丰富的错误消息。当然,我知道它应该有一个标准。但在我的例子中,我们有很多客户,我们无法确定他们是否根据模式创建XML。我们还需要支持工作服务,无论它是carName还是carName。为什么在输入错误时,您的服务需要工作?更好的解决方案是返回信息性错误消息,以确保下次输入正确。更多细节见附录。当然,我知道它应该有一个标准。但在我的例子中,我们有很多客户,我们无法确定他们是否根据模式创建XML。我们还需要支持工作服务,无论它是carName还是carName。为什么在输入错误时,您的服务需要工作?更好的解决方案是返回信息性错误消息,以确保下次输入正确。详见附录。
If carrierNode.Attributes("carname") IsNot Nothing Then
CarrierLabel = carrierNode.Attributes("carname").Value
...............
Dim attribute = (From a In carrierNode.Attributes() _
Where a.Name.ToLower() = "carname" _
Select a).FirstOrDefault()
If attribute IsNot Nothing Then
CarrierLabel = attribute.Value
...