XPathSelectElement可以忽略大小写吗?

本文关键字:大小写 XPathSelectElement | 更新日期: 2023-09-27 18:01:40

当我们尝试使用XPathSelectElement或任何类似于从XDocument检索属性的操作时,是否有一种方法可以忽略大小写?问这个问题的目的是,我有一些配置文件(xml),我正在编写一个通用代码,它将读取配置文件以获取XPathSelectElement所需的信息。此外,我还尝试获取属性的值。即使有人把节点/属性放在不同的情况下,我的程序应该能够正常工作。

我使用c#/。Net 3.5 .

XPathSelectElement可以忽略大小写吗?

使用XPath不能忽略大小写。不过,你可以适应。

例如-元素,假设它们只包含ASCII范围内的字母:

<>之前//* [翻译(名字(),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") = 'myname']之前

属性的工作原理相同(用@*代替*)。

如果不想让XPath表达式变得臃肿,可以事先将所有元素和属性名称小写,例如通过XSLT:

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
  <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'" />
  <xsl:template match="node()">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="*">
    <xsl:element name="{translate(name(), $upper, $lower)}">
      <xsl:apply-templates select="node() | @*" />
    </xsl:element>
  </xsl:template>
  <xsl:template match="@*">
    <xsl:attribute name="{translate(name(), $upper, $lower)}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

在加载XML字符串之前,将其小写。这样问题就解决了。我自己也用这种方法。