c#中不区分大小写的XML解析器
你用XML做的每件事都是区分大小写的,我知道。
但是,现在我发现自己处于一种情况,如果我以某种方式使xml名称/属性识别不敏感,我正在编写的软件会产生更少的错误。 不区分大小写的XPath将是一个神派。
在c#中有一个简单的方法/库吗?
XMl文档可以分别具有两个不同的元素: MyName
和myName
– 它们是不同的。 将它们转换/处理为同名是一个可能产生严重后果的错误。
如果不是这种情况,那么这里有一个更精确的解决方案,使用XSLT将文档处理成只有小写元素名称和小写属性名称的文档:
当此转换应用于任何XML文档时,例如 :
Victor Hugo Victor Hugo French Sophocles Greek Leo Tolstoy Russian Alexander Pushkin Russian Plato Greek
生成所需的正确结果(元素和属性名称转换为小写) :
Victor Hugo Victor Hugo French Sophocles Greek Leo Tolstoy Russian Alexander Pushkin Russian Plato Greek
将文档转换为所需的表单后,即可对转换后的文档执行任何所需的处理。
您可以创建不区分大小写的方法(可用性扩展),例如:
public static class XDocumentExtensions { public static IEnumerable ElementsCaseInsensitive(this XContainer source, XName name) { return source.Elements() .Where(e => e.Name.Namespace == name.Namespace && e.Name.LocalName.Equals(name.LocalName, StringComparison.OrdinalIgnoreCase)); } }
XML是文本。 只需在加载到您正在使用的任何解析器之前将其降低。
只要您不必对模式进行validation并且不介意值全部为小写,这应该可以正常工作。
事实是任何XML解析器都区分大小写。 如果不是,它将不是XML解析器。
我首先将所有标签和属性名称转换为小写,通过使用SAX
解析保持值不变,即。 使用XmlTextReader
。