当我们尝试使用 XPathSelectElement 或任何类似于从XDocument检索属性的操作时,是否有办法忽略大小写?提出这个问题的目的是,我有一些配置文件(xml),我正在编写一个通用代码,它将读取配置文件以获取XPathSelectElement所需的信息。另外,我尝试获取属性的值。即使有人将节点/属性放在不同的情况下,我的程序也应该能够正常工作。
我使用C#/。Net 3.5。
答案 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字符串之前,请使用小写字母。这将解决问题。我自己用这个方法。