2013-08-01 3 views
1

У меня есть некоторые версии формата XML-файла, которые мне нужно загрузить в БД с помощью C#. Но теперь я точно не знаю, какой уровень теги мне нужно импортировать, потому что в зависимости от версии xml тег может быть внутренними другими группами или тегами.Поиск узла на всех уровнях элемента в файле XML

Некоторые примеры XML-файлов

Ex1) 
<a> 
    <group1> 
     <tag>searched tag</tag>  
    </group1> 
    <b> </b> 
    <c> </c> 
</a> 

Ex2) 
<a> 
    <b> 
     <group1> 
      <c> 
      <tag>searched tag</tag> 
      </c> 
     </group1> 
    </b> 
</a> 

Искомое тег всегда внутри тега group1, и все файлы, имеет Xmlns и атрибуты схемы.

Я попытался использовать xml.SelectSingleNode (\ group1 \ tag), но выдал ошибку, когда файл имеет заголовок схемы и конфигурацию пространства имен.

Заранее спасибо.

ответ

2

Если вы уверены, что элемент tag ниже group1, и может быть в любом количестве уровней промежуточных узлов между ними, и предполагая, что все элементы находятся в глобальном пространстве имен, то используйте: (Обратите внимание на направление косой черты):

xml.SelectSingleNode("//group1//tag") 

Если же вы не знать, какие xmlns соответствующие элементы находятся в, то вам нужно будет сделать так:

xml.SelectSingleNode("//*[local-name()='group1']//*[local-name()='tag']") 

Примечание однако использование «//» для больших файлов в синтаксическом анализаторе MSXml может быть немного медленным, поэтому оно будет быстрее, например. если вы можете изолировать точные пути к соответствующим узлам, а затем можете использовать |

например. В вашем примере, если тег может быть «либо» Ex1 ИЛИ Ex2, затем:

/a/group1/tag | /a/b/group1/c/tag 

должен работать.

+0

Я пробовал использовать тег локального имени, как ответ, но все равно получил пустой XmlNode. Единственным способом, который я основал, является использование xml.GetElementsByTagName (имя_байта), передающее имя group1 и поиск тега в полученном XMLNodeList. –

+0

Мой плохой - я пропустил '()' после 'local-name()' - fixed - я проверил пару тестовых файлов, используя MsXml. – StuartLC

+1

Отлично! который работает для выбора значения TAG и для выбора всего элемента Group1 ... спасибо –

Смежные вопросы