【发布时间】:2014-01-13 14:19:43
【问题描述】:
首先我想向您展示我生成的 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")
【问题讨论】:
-
为什么你认为前缀很重要?它不会(或者至少不应该)。
-
这取决于程序处理 XML 的方式,如果没有像我需要的那样获取我的 XML,我必须在业务逻辑上做出巨大的改变(是的,可能不是最干净和最好的 BL)跨度>
-
如果程序关心前缀,那么它就被严重破坏了。这不是 XML 的工作方式。是否可能进行字符串操作而不是 XML 操作?前缀是“dis”、“abc”还是空都无关紧要。
-
哦哇..我认为你是对的。在解决 NS 问题时,我对其余部分视而不见。对此感到抱歉。谢谢你让我大开眼界:)
标签: .net xml vb.net linq-to-xml