Просто нет никакой консоли, слушающей по умолчанию. При выполнении в режиме отладки существует присоединенная консоль, но в продуктивной среде это - как Вы подозревали, сообщение просто не идет никуда, потому что ничто не слушает.
Теперь, когда вы отредактировали вопрос, он имеет смысл. Давайте рассмотрим этот ввод:
<tr><td>x</td><td>User Name</td></tr>
и ваш нерабочий запрос:
//tr[normalize-space(td/text()) = 'User Name']
Теперь td / text ()
означает «выбрать все дочерние текстовые узлы всех дочерних узлов td
из текущий узел ". В этом случае это даст набор узлов, состоящий из двух текстовых узлов, x
и Имя пользователя
.
Теперь вы вызываете normalize-space ()
на этот набор узлов. Тип единственного аргумента normalize-space ()
- это строка?
. Поскольку набор узлов не является строкой, преобразования вступают в силу в соответствии с разделом 3.2 рекомендации XPath 1.0:
Аргумент преобразуется в строку типа, как будто путем вызова функции string ().
Теперь давайте посмотрим на определение string () в разделе 4.2:
Набор узлов преобразуется в строку путем возврата строкового значения узла в наборе узлов, который является первым в порядке документа . Если набор узлов пуст, возвращается пустая строка.
В нашем примере первый узел «в порядке документа» - это текстовый узел x
, поэтому он будет использоваться ; второй узел игнорируется. Таким образом, вы вызываете normalize-space ('x')
. Естественно, это не будет сравниваться с именем пользователя. Чтобы выполнить эту работу, используйте:
//tr[td[normalize-space(text()) = 'User Name']]
Это можно записать как «выберите все tr
узлы, у которых есть дочерние узлы td
, первый дочерний text ()
узел которого имеет нормализованное строковое значение Имя пользователя
"- это то, что вам нужно. Кроме того, вы можете упростить это до:
Здесь отлично работает:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"
<table>
<tr><td>User Name</td></tr>
<tr><td> User Name </td></tr>
<tr><td> User Name </td></tr>
</table>");
Console.WriteLine(
xmlDoc.SelectNodes(
"//tr[td[normalize-space(.) = 'User Name']]").Count); // shows "3"
Не могли бы вы обновить свой вопрос фактическим образцом XML?