Tenemos la solución a esta interrogante, al menos eso creemos. Si tienes dudas deja tu comentario, que para nosotros será un gusto responderte
Solución:
Wow, seguro que todos ustedes están haciendo esto complicado. ¿Por qué no hacer esto?
public static string XpathExpression(string value)
if (!value.Contains("'"))
return ''' + value + ''';
else if (!value.Contains("""))
return '"' + value + '"';
else
return "concat('" + value.Replace("'", "',"'",'") + "')";
.NET Violín y prueba
Aunque ciertamente no funcionará en todas las circunstancias, aquí hay una manera de evitar el problema:
doc.DocumentElement.SetAttribute("searchName", name);
XmlNode n = doc.SelectNodes("//review[@name=/*/@searchName]");
Necesitaba esto, así que creé esta solución para C#.
///
/// Returns a valid XPath statement to use for searching attribute values regardless of 's or "s
///
/// Attribute value to parse
/// Parsed attribute value in concat() if needed
public static string GetXpathStringForAttributeValue(string attributeValue)
bool hasApos = attributeValue.Contains("'");
bool hasQuote = attributeValue.Contains(""");
if (!hasApos)
return "'" + attributeValue + "'";
if (!hasQuote)
return """ + attributeValue + """;
StringBuilder result = new StringBuilder("concat(");
StringBuilder currentArgument = new StringBuilder();
for (int pos = 0; pos < attributeValue.Length; pos++)
switch (attributeValue[pos])
case ''':
result.Append('"');
result.Append(currentArgument.ToString());
result.Append("'",");
currentArgument.Length = 0;
break;
case '"':
result.Append(''');
result.Append(currentArgument.ToString());
result.Append(""',");
currentArgument.Length = 0;
break;
default:
currentArgument.Append(attributeValue[pos]);
break;
if (currentArgument.Length == 0)
result[result.Length - 1] = ')';
else
result.Append("'");
result.Append(currentArgument.ToString());
result.Append("')");
return result.ToString();
Si sostienes algún reparo y capacidad de aumentar nuestro ensayo te invitamos realizar un paráfrasis y con deseo lo interpretaremos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)