Может ли XPathSelectElement игнорировать регистр? - PullRequest
1 голос
/ 11 июля 2011

Есть ли способ игнорировать случай, когда мы пытаемся использовать XPathSelectElement или любую другую операцию, например получение атрибутов из XDocument? Цель задать этот вопрос заключается в том, что у меня есть несколько файлов конфигурации (xml), и я пишу общий код, который будет читать файлы конфигурации, чтобы получить необходимую информацию для XPathSelectElement. Также я пытаюсь получить значения атрибутов. Даже если кто-то выставит узлы / атрибуты в другом случае, моя программа должна работать без сбоев.

Я использую C # /. Net 3.5.

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Нельзя игнорировать регистр с 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>
0 голосов
/ 30 августа 2015

Перед загрузкой строки XML сделайте строчные буквы. Это решит проблему. Я использую этот метод сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...