65.9K
CodeProject 正在变化。 阅读更多。
Home

不区分大小写的 XPath 查询

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2018年4月3日

CPOL
viewsIcon

16212

如何对所有小写元素执行 XPath 查询

引言

使用 XPath 查询可以快速在 XML 文件中查找值。前几天,我们在编写查询时发现需要查找 XML 中的元素,而无需考虑大小写。是的,我知道,你说得对,但编程有时会很脏。

Using the Code

以下扩展方法使我们能够执行不区分大小写的 XPath 查询。

public static class XDocumentExtensions
{
	/// Transform the elements in the XDocument to all lower case
	/// Only the elements are affected, not the attributes
	public static XDocument TransformToLowerCaseElements(this XDocument value)
	{
		value.DescendantNodes().OfType<XElement>().ToList()
		  .ForEach(n => n.Name = n.Name.ToString().ToLower());
		return value;
	}

	/// Transforms the XDocument to elements with lower case and returns the query result
	public static XElement XPathSelectElementIgnoreCase(this XDocument value, string xpath)
	{
		return value.TransformToLowerCaseElements().XPathSelectElement(xpath);
	}

	/// Transforms the XDocument to elements with lower case and returns the query result
	public static IEnumerable<XElement> XPathSelectElementsIgnoreCase
	                                            (this XDocument value, string xpath)
	{
		return value.TransformToLowerCaseElements().XPathSelectElements(xpath);
	}
}

示例用法

以下 XML 作为示例

var xmlstring=@"<?xml version=""1.0"" encoding=""utf-8""?>
<Parents>
	<Parent Name=""Chris"" Type=""father"">
		<Child>
			<Name>Jonathan</Name>
			<AGE>13</AGE>
		</Child>
	</Parent>
</Parents>";

如果我们将此加载到 XDocument 中,然后将其转换为小写

var xdoc = XDocument.Parse(xmlstring);
xdoc.TransformToLowerCaseElements();

XML 将如下所示

<?xml version="1.0" encoding="utf-8"?>
<parents>
	<parent Name="Chris" Type="father">
		<child>
			<name>Jonathan</name>
			<age>13</age>
		</child>
	</parent>
</parents>

现在,知道此 XML 中的所有元素都可以转换为小写,我们就可以使用新的扩展方法对其进行查询

var xdoc = XDocument.Parse(xmlstring);
var age = xdoc.XPathSelectElementIgnoreCase("parents/parent/child/age").Value;

关注点

最初,我也将 xpath 参数在 XPathSelectElementIgnoreCase 中转换为小写。我删除了它,因为它使我无法在构建的查询中使用属性。

这些扩展方法在编写代码和测试时帮助我们很多,尤其是在 xsd 尚未最终确定时。

要了解有关 XPath 查询中不区分大小写的更多信息,请查看

© . All rights reserved.