Как мне установить URI пространства имен в c #? - PullRequest
1 голос
/ 30 ноября 2010

Я использую пространство имен в моем xml (мне нужно использовать это для целей проверки xsd). Из-за этого мой xpath больше не работает.

У меня есть код:

XmlDocument doc = new XmlDocument();
doc.Load(newXmlFilePath);

И XML:

<?xml version="1.0" encoding="UTF-8"?>
<video xmlns="UploadXSD">
  <title>
    A vid with Pete
  </title>
  <description>
  Petes vid
  </description>
  <contributor>
    Pete
  </contributor>
  <subject>
    Cat 2
  </subject>
</video>

Но мой xpath не выбирает узел. Я попытался установить пространство имен, используя:

doc.NamespaceUR = "x"; 

Однако, это единственный доступный метод доступа. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("vid", "UploadXSD");

Обратите внимание, что вам нужно использовать это с вашим запросом. Например:

doc.SelectSingleNode("/vid:video/vid:subject", nsMgr);

В противном случае SelectSingleNode не будет знать, как работать в контексте этого менеджера.

1 голос
/ 30 ноября 2010

Ознакомьтесь с Microsoft Как: http://support.microsoft.com/kb/318545

0 голосов
/ 30 ноября 2010

Основываясь на ваших других недавних вопросах, я думаю, что вы пытаетесь иметь дело со смесью документов, некоторые из которых находятся в определенном пространстве имен, а некоторые нет - так что вы хотите быть независимыми от пространства имен, верно?

Есть пара вещей, которые вы могли бы сделать.Вы можете использовать хак , чтобы убрать пространство имен - но это всегда казалось мне немного хрупким.Существуют и другие способы выразить то, что семантически является одним и тем же документом - например, все это может использовать префикс пространства имен для каждого отдельного элемента - и этот трюк не сработает.

Или вы можете писать независимые от пространства имен запросы XPath,Например "/*[local-name()='video']/*[local-name()='subject']"

...