2014-09-30 7 views
0
Dim soapEnvelope As XElement = New XElement(soap + "Envelope", 
             New XAttribute(XNamespace.Xmlns + "soap", soap.NamespaceName), 
             New XAttribute(soap + "encodingStyle", "http://www.w3.org/2001/12/soap-encoding"), 
             New XElement(soap + "Body", 
             New XAttribute("xmlns", "http://www.test.com"), 
             New XElement("Open", 
             New XElement("Data", 
             New XElement("Desc", _dData.Desc), 
             New XElement("Num", _dData.Num), 
             New XElement("Ref", _dData.Ref), 
             New XElement("Mnn", _dData.Mnn), 
             New XElement("Ftp", _dData.Ftp)) 
           ))) 

дает этот выход следующее:?XElement Автоматически Наличие XMLNS атрибута

<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
    <soap:Body xmlns="http://www.test.com"> 
    <Open xmlns=""> 
     <Data> 
     <Desc>testApp</Desc> 
     <Num>1</Num> 
     <Ref></Ref> 
     <Mnn>116</Mnn> 
     <Ftp></Ftp> 
     </Data> 
    </Open> 
    </soap:Body> 
</soap:Envelope> 

Вопрос почему <Open> XElement автоматически получит xmlns=" "атрибут

Я хочу такой же результат, но без каких-либо признаков для XElement <Open>

Любая помощь будет принята с благодарностью.

ответ

1

Это потому, что XML имеет пространство имен по умолчанию (xmlns="...") объявлен в <Open> элемента. В XML все элементы-потомки наследуют пространство имен по умолчанию автоматически от предка, если явно не задано иное (например, с использованием префикса, указывающего на другое пространство имен, или путем объявления другого пространства имен по умолчанию на уровне потомков).

Используя код, который вы пробовали, потомки <Body> установлены без пробелов. Вам необходимо установить потомки элемента <Open> в том же пространстве имен по умолчанию, используя XNamespace, например:

XNamespace ns = "http://www.test.com" 
Dim soapEnvelope As XElement = New XElement(soap + "Envelope", 
             New XAttribute(XNamespace.Xmlns + "soap", soap.NamespaceName), 
             New XAttribute(soap + "encodingStyle", "http://www.w3.org/2001/12/soap-encoding"), 
             New XElement(soap + "Body", 
             New XAttribute("xmlns", "http://www.test.com"), 
             New XElement(ns+"Open", 
             New XElement(ns+"Data", 
             New XElement(ns+"Desc", _dData.Desc), 
             New XElement(ns+"Num", _dData.Num), 
             New XElement(ns+"Ref", _dData.Ref), 
             New XElement(ns+"Mnn", _dData.Mnn), 
             New XElement(ns+"Ftp", _dData.Ftp)) 
           ))) 
1

Вам нужно создать каждый элемент в пространстве имен:

XNamespace t = "http://www.test.com"; 
             New XElement(t + "Open", 
             New XElement(t + "Data", 
             New XElement(t + "Desc", _dData.Desc), 
             New XElement(t + "Num", _dData.Num), 
             New XElement(t + "Ref", _dData.Ref), 
             New XElement(t + "Mnn", _dData.Mnn), 
             New XElement(t + "Ftp", _dData.Ftp))