それはあなたが心配しているXPath式のちょうど読みやすさであれば、少し離れているあなたのことができ抽象的な:
XPathValueContains()
と
XPathValueEquals()
がある
var keyword = "A Keyword";
var nodes1 = xmlDoc.SelectNodes(String.Format("//foo[{0}]", XPathValueContains(keyword)));
var nodes2 = xmlDoc.SelectNodes(String.Format("//foo[{0}]", XPathValueEquals(keyword)));
:
public static string XPathValueContains(string input)
{
return String.Format(
"contains(translate(., {0}, {1}), {1})",
XPathEscapeString(input.ToUpperInvariant()),
XPathEscapeString(input.ToLowerInvariant())
);
}
public static string XPathValueEquals(string input)
{
return String.Format(
"translate(., {0}, {1}) = {1}",
XPathEscapeString(input.ToUpperInvariant()),
XPathEscapeString(input.ToLowerInvariant())
);
}
とXPathEscapeString()
埋め込まれた一重引用符を扱う関数は、次のように定義されます:
public static string XPathEscapeString(string input)
{
if (input.Contains("'"))
{
return "concat('" + String.Join("', \"'\", '", input.Split('\'')) + "')";
}
else
{
return "'" + input + "'";
}
}
*あなたがそれを行うには*をしたいのはなぜ? – Tomalak
いつもtranslate関数を使わなくても、ドキュメントの内容に大文字と小文字を区別しないxpathクエリを実行したい –
私はそれほど考えませんでした。そのため実際のパフォーマンスのボトルネックはありますか? – Tomalak