2014-01-13 4 views
0

первым я хотел бы показать вам, как мой полученный XML выглядит следующим образом:Создание XDocument с XNamespaces

<env:Envelope xmlns:env="http://www.sap.com/SBO/DIS"> 
    <env:Body> 
    <dis:ExecuteSQLResponse xmlns:dis="http://www.sap.com/SBO/DIS"> 
     <BOM> 
     <BO> 
      <AdmInfo> 
      <Object>oRecordset</Object> 
      </AdmInfo> 
      <Table /> 
     </BO> 
     </BOM> 
    </ExecuteSQLResponse> 
    </env:Body> 
</env:Envelope> 

Как это должно выглядеть следующим образом:

<env:Envelope xmlns:env="http://www.sap.com/SBO/DIS"> 
    <env:Body> 
    <ExecuteSQLResponse xmlns="http://www.sap.com/SBO/DIS"> 
     <BOM> 
     <BO> 
      <AdmInfo> 
      <Object>oRecordset</Object> 
      </AdmInfo> 
      <Table /> 
     </BO> 
     </BOM> 
    </ExecuteSQLResponse> 
    </env:Body> 
</env:Envelope> 

Я использую следующий код для создания XML:

resXml.Add(New XElement(env + "Envelope", 
              New XAttribute(XNamespace.Xmlns + "env", env.NamespaceName), 
           New XElement(env + "Body", 
           New XElement(dis + "ExecuteSQLResponse", 
              New XAttribute(XNamespace.Xmlns + "dis", dis.NamespaceName), 
           New XElement("BOM", 
           New XElement("BO", 
           New XElement("AdmInfo", 
           New XElement("Object", "oRecordset")), 
           New XElement("Table"))))))) 

это некоторые vb.net кода, но должны быть одинаковыми в C#

моя проблема - это «dis: ExecuteSQLResponse» после попытки и попытки, я не могу понять, как я могу удалить «dis» перед ExecuteSQLResponse. Я имею в виду пространства имен хорошо .. он должен просто выглядеть следующим образом: «ExecuteSQLResponse Xmlns =» http://www.sap.com/SBO/DIS «» без «Диса»

моего определения XNamespace :

Dim env As XNamespace = XNamespace.Get("http://www.w3.org/2003/05/soap-envelope") 
Dim dis As XNamespace = XNamespace.Get("http://www.sap.com/SBO/DIS") 
+0

Почему вы считаете, что приставка имеет значение? Это не (или, по крайней мере, не должно). –

+0

Это зависит от того, как программа обрабатывает XML и не получает мой XML, как мне это нужно, я должен внести огромные изменения в бизнес-логику (да, может быть, не самый чистый и лучший BL) – darkdog

+2

Если программа заботится о префиксе, то он ужасно разбит. XML работает не так. Возможно ли это, если вместо манипуляции с XML манипулировать строкой? Не имеет значения, является ли префикс «dis» или «abc» или пустым. –

ответ

0

Просто измените эту часть:

New XElement(dis + "ExecuteSQLResponse", '->which correspond to dis:ExecuteSQLResponse 

к этому:

New XElement("ExecuteSQLResponse", '->which correspond to ExecuteSQLResponse 
+0

это не решение извините. если я сделаю это, мой результат будет выглядеть так: «ExecuteSQLResponse» и не нравится Мне это нужно: «ExecuteSQLResponse xmlns =» http://www.sap.com/SBO/DIS « – darkdog

+0

Вы пробовали? part: 'Новый XAttribute (XNamespace.Xmlns +" dis ", dis.NamespaceName), которые добавляют атрибут xmlns. Он должен выводить то, что вам нужно: tag с атрибутом xmlns без префикса. Я пробовал это на C#. – har07

+0

ok, я просто заметил, что эта часть решена, но оставила эту часть с префиксом 'xmlns: dis' – har07

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