供参考参见: This Question
在上面的要求是写
<root xmlns:ci="http://somewhere.com" xmlns:ca="http://somewhereelse.com">
<ci:field1>test</ci:field1>
<ca:field2>another test</ca:field2>
</root>
并在那里给出了代码
但我的要求是写
<myrootelement>
<ci:field1>test</ci:field1>
<ca:field2 ca:attrb1="value">another test</ca:field2>
</myrootelement>
因为这个元素将成为另一个大XML的一部分,它包含ci和ca的自己的命名空间引用。现在“<myrootelement>
”通过api作为子项插入到特定的XElement中,因此我无法访问XSD或命名空间等。
我尝试过什么
XElement element = new XElement("myrootelement",
new XElement(ci + "field1", "test"),
new XElement(ca + "field2", "another test", new XAttribute(ca + "attrb1", "value")));
但是产生了:
<myrootelement>
<field1 xmlns="http://somewhere.com">test</field1>
<field2 p2:attrb1="value" xmlns:p2="http://somewhereelse.com" xmlns="http://somewhereelse.com">another test</field2>
</myrootelement>
编辑:添加更多详细信息
然后使用
将上述元素发送到Rest API{
.
.
var client = new RestClient(uri);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddParameter("text/xml", elem, ParameterType.RequestBody);
.
.
}
答案 0 :(得分:0)
您尝试生成的不是XML 因为它不符合XML规范,所以不要指望LINQ-to-XML之类的XML API可以做到这一点您。你最好的选择可能是生成一个合适的XML,其中包括命名空间定义(如果你此时没有那个信息,可能使用伪URI),然后做一些字符串操作操作(正则表达式或简单{{1}之后删除那些名称空间。
或许这个问题只是一个XY problem,因为插入不符合XML规范的字符串,你打算在下一步中做,也可能会有问题,假设你还在使用一些用于此任务的XML API。