Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net System.Xml.Linq.XAttribute命名空间在添加到XElement时意外修改_.net_Xml_Linq_F# - Fatal编程技术网

.net System.Xml.Linq.XAttribute命名空间在添加到XElement时意外修改

.net System.Xml.Linq.XAttribute命名空间在添加到XElement时意外修改,.net,xml,linq,f#,.net,Xml,Linq,F#,当添加到父XElement时,我的XAttribute的命名空间被意外修改 我有一些F#代码如下: let myRoot=XElement(XName.Get(“myRoot”)) 让mychildxelement=XElement(XName.Get(“MyXElement”)) 添加(mychildxelement) 添加(XAttribute(XNamespace.Xmlns+“odata”,”http://mynamespace")) 让name=XNamespace.Get(“odat

当添加到父XElement时,我的XAttribute的命名空间被意外修改

我有一些F#代码如下:

let myRoot=XElement(XName.Get(“myRoot”))
让mychildxelement=XElement(XName.Get(“MyXElement”))
添加(mychildxelement)
添加(XAttribute(XNamespace.Xmlns+“odata”,”http://mynamespace"))
让name=XNamespace.Get(“odata”)+myattrname
添加(XAttribute(名称,“false”))
不幸的是,当我打印myRoot(
myRoot.ToString()
)时,它会生成以下xml:

<MyRoot xmlns:odata="http://mynamespace">
  <MyXElement p3:myattrname="false" xmlns:p3="odata" />
</MyRoot>


出于某种原因,它将名称空间更改为“p3”,并在XElement的根级别添加一个额外的名称空间快捷方式。我确实希望避免使用元素级别的xmlns。有人知道如何避免这种情况吗?

XML不允许不定义前缀的任意前缀。当您没有父元素或包含文档时,命名空间声明只能放在元素本身。但是,您可以自定义前缀:

#r“System.Xml.Linq.dll”
open System.Xml.Linq
让myAttrName=“myAttrName”
让odata=“odata”
让name=XNamespace.Get(odata)+myAttrName
让myXElement=XElement(XName.Get(“myXElement”))
添加(XAttribute(XNamespace.Xmlns+odata,odata))
添加(XAttribute(名称,“false”))
myXElement.ToString()
// ""
更新

当您有父元素时,需要按如下方式指定子元素的名称空间(即使用名称空间而不是其前缀):

#r“System.Xml.Linq.dll”
open System.Xml.Linq
让odata=XNamespace.Xmlns+“odata”
让odataNS=”http://mynamespace"
让myRoot=XElement(XName.Get(“myRoot”))
添加(XAttribute(odata,odataNS))
让myChildXElement=XElement(XName.Get(“MyXElement”))
添加(XAttribute(XNamespace.Get(odataNS)+“myAttrName”、“false”))
添加(myChildXElement)
printfn“%A”myRoot
哪个打印(由SO突出显示语法)


请向我表示感谢,这有助于我了解发生了什么。不幸的是,有一个父元素设置了xmlns,我仍然得到相同的结果。你知道我错过了什么吗?(我已经更新了原始问题,将代码包含在根元素中)