2014-02-17 8 views
0

Я имею следующую структуру XML:пространство имен конкретных XML узла в C#

<?xml version="1.0" encoding="utf-16"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <StoreResponse xmlns="http://www.some-site.com"> 
     <StoreResult> 
     <Message /> 
     <Code>OK</Code> 
     </StoreResult> 
    </StoreResponse> 
    </soap:Body> 
</soap:Envelope> 

Мне нужно, чтобы получить InnerText от Code из этого документа, и мне нужна помощь с соответствующим заявлением XPATH.

Я действительно запутался в пространствах имен XML. Во время работы над предыдущей проблемой пространства имен в другом документе XML я узнал, что даже если нет ничего перед Code (например, ns:Code), он по-прежнему является частью пространства имен, определяемого атрибутом xmlns в его родительском узле. Теперь есть несколько узлов xmlns, определенных в родителях Code. Что такое пространство имен, которое мне нужно указать в инструкции XPATH? Существует ли такая вещь, как «первичное пространство имен»? Наследуют ли дочерние элементы (первичное) пространство имен своих родителей?

ответ

1

Пространство имен < Код > элемент http://www.some-site.com. xmlsn: xxx означает, что имена, предваряемые xxx: (например, soap: Body), имеют это пространство имен. xmlns сам по себе означает, что это пространство имен по умолчанию для имен без префикса.

0

Пример использования подхода XDocument (Linq):

XNamespace ns = "http://www.some-site.com"; 

var document = XDocument.Parse("your-xml-string"); 
var elements = document.Descendants(ns + "StoreResult") 

Потомок элементы наследуют последнее непосредственное пространство имен. В вашем примере вам нужно будет создать два пространства имен для конверта с мылом, а второе - для «some-site».

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