Ответ 1
С помощью пути
/foo/bar/comment()
вы можете выбрать все комментарии в элементе /foo/bar. Конечно, зависит от вашего языка выбора. Но обычно это так, как вы это делаете.
Как получить доступ к комментариям внутри XML-документа с помощью XPath?
Например:
<table>
<length> 12 </length>
<!--Some comment here-->
</table>
Я хочу получить доступ к "Некоторый комментарий здесь".
Спасибо...
EDIT: Я использую MSXML DOM ActiveX, и комментарий команды() кажется неудачным... Любая идея, почему?
С помощью пути
/foo/bar/comment()
вы можете выбрать все комментарии в элементе /foo/bar. Конечно, зависит от вашего языка выбора. Но обычно это так, как вы это делаете.
Используйте функцию comment(), например: -
/table/length/following::comment()[1]
выбирает первый комментарий, следующий за элементом длины.
Edit
Manoj спрашивает в комментарии к этому ответу, почему это не работает в MSXML. Причина в том, что вы используете MSXML3. По умолчанию MSXML3 не использует XPath в качестве языка выбора, по умолчанию используется более слабый язык (шаблон XSL). Вы должны установить XPath в качестве языка выбора с помощью метода DOMDocument setProperty. Например (в JScript): -
var dom = new ActiveXObject("MSXML2.DOMDocument.3.0");
dom.setProperty("SelectionLanguage", "XPath");
Теперь ваш полный язык XPath будет работать в ваших запросах (обратите внимание, что одно изменение прерывания - это предикаты индексатора, основанные на XPath, в то время как они основаны на 0 в XSL-шаблоне).
На основе комментариев OP к опубликованным ответам (и мое любопытство относительно того, почему эта простая вещь не сработает), вот мое предложение:
Используя выражение XPath, предложенное @Anthony, я смог успешно загрузить комментарий node со следующей функцией JS:
function SelectComment(s)
{
var xDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
if (xDoc)
{
xDoc.loadXML(s);
var selNode = xDoc.selectSingleNode("/table/length/following::comment()[1]");
if (selNode != null)
return selNode.text;
else
return "";
}
}
Образец вызова:
SelectComment("<table><length> 12</length><!--Some comment here--></table>");
Вывод:
"Some comment here"
Примечания:
а. Версия MSXML может отличаться. Пожалуйста, используйте соответствующую информацию.
б. Этот тип кода определенно не рекомендуется, поскольку он работает только в IE. Однако, поскольку это ваше явно заявленное требование, я использовал объект ActiveXObject.
с. Вы не упомянули в своих комментариях, что не удается в предлагаемых выражениях XPath. Я предполагаю, что вы не запрашиваете свойство text
извлеченного node. Имейте в виду, что SelectSingleNode всегда возвращает IXmlNode
, и вам нужно запросить его свойства data
или text
.
Возможно, эта помощь поможет, Этот образец удаляет комментарии
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
foreach(XmlNode node in list)
node.ParentNode.RemoveChild(node);
Отстало отсюда текст ссылки