XPathSelectElement可以忽略大小写吗?

时间:2011-07-11 13:20:59

标签: c# xml .net-3.5 xpath

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

我使用C#/。Net 3.5。

2 个答案:

答案 0 :(得分:1)

你不能忽视XPath的情况。不过你可以容纳。

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

//*[
  translate(
    name(), 
    '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>

答案 1 :(得分:0)

在加载XML字符串之前,请使用小写字母。这将解决问题。我自己用这个方法。