Можно ли указать префикс пространства имен только один раз в выражении xpath? - PullRequest
1 голос
/ 30 августа 2011

У меня есть только одно пространство имен в моем XML-файле, определенное для корневого элемента.

<root xmlns="http://my-namespace">
    <aChild>
        <secondChild />
    ...

Можно ли избежать его записи перед каждым элементом моего выражения xpath?
После выполнения

xmlNamespaceManager.AddNamespace("ns", "http://my-namespace");

мне нужно написать

xml.SelectNodes("ns:root/ns:aChild/ns:secondChild", xmlNamespaceManager);

И было бы намного проще сделать это просто

xml.SelectNodes("ns:root/aChild/secondChild", xmlNamespaceManager);

У меня есть разработчики, которые отправляют xpathвыражения в XML, но они не обязательно знают префикс или пространство имен, они просто знают, что им нужен доступ root/aChild/secondChild.

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 августа 2011

К сожалению, как ни интуитивно понятно, нет простого способа определить пространство имен по умолчанию в XPath. Имя XPath без объявления пространства имен связывается с пространством имен null, а не с URI, назначенным пространству имен по умолчанию.

Это обсуждается в Обработка пространства имен по умолчанию в XPath и Легко должно быть просто

1 голос
/ 30 августа 2011

вы можете добавить пространство имен на уровне документа

  XmlDocument doc = new XmlDocument();  

  XmlSchema schema = new XmlSchema();
  schema.Namespaces.Add("xmlns", "http://www.sample.com/file");

  doc.Schemas.Add(schema);
...