使用XNamespaces创建XDocument

时间:2014-01-13 14:19:43

标签: .net xml vb.net linq-to-xml

首先,我想向您展示我生成的XML的样子:

<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”尝试并尝试后我无法弄清楚如何在ExecuteSQLResponse之前删除“dis”。 我的意思是命名空间很好..它应该看起来像这样: “ExecuteSQLResponse xmlns =”http://www.sap.com/SBO/DIS“” 没有“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")

1 个答案:

答案 0 :(得分:0)

只需更改此部分:

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

到此:

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