Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
C# 将XMLDocument转换为XDocument,将名称空间从xsi修改为p1_C#_Xml_Linq To Xml - Fatal编程技术网

C# 将XMLDocument转换为XDocument,将名称空间从xsi修改为p1

C# 将XMLDocument转换为XDocument,将名称空间从xsi修改为p1,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我创建一个XML文档: ` 然后,我使用下面的函数将其转换为XDocument,但我得到的名称空间更改如下 XDocument ToXDocument(XmlDocument xmlDocument) { using (var nodeReader = new XmlNodeReader(xmlDocument)) { nodeReader.MoveToContent(); return XDocument.Load(nodeReader);

我创建一个XML文档:

`

然后,我使用下面的函数将其转换为XDocument,但我得到的名称空间更改如下

XDocument ToXDocument(XmlDocument xmlDocument)
{
    using (var nodeReader = new XmlNodeReader(xmlDocument))
    {
        nodeReader.MoveToContent();
        return XDocument.Load(nodeReader);
    }
}
`
下面是xml和XDocument



您需要在元素的开头手动显式添加xsi命名空间声明

节点按文档顺序处理,名称空间声明在首次使用后出现。它不知道如何使用
xsi
作为前缀,直到为时已晚

var doc = new XmlDocument();
doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null));
var root = (XmlElement)doc.AppendChild(doc.CreateElement("BMECAT"));
var xsi = "http://www.w3.org/2001/XMLSchema-instance";
root.SetAttribute("xmlns:xsi", xsi); //set the namespace now
root.SetAttribute("schemaLocation", xsi, "http://www.adlnet.org/xsd/adlcp_v1p3");
root.SetAttribute("version", "2005");

最好是写下实际的xml文本,而不是发布图像,这样我们可以更清楚地看到它,甚至在必要时使用示例执行测试。我通常使用:XDocument.Parse(xmlDocument.ToString())实际上我的函数给出了预期的结果,但是我不明白为什么我的XML中的xsi会被p1放在XDocument中?谢谢Jeff Mercado,这正是我想要的。
var doc = new XmlDocument();
doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null));
var root = (XmlElement)doc.AppendChild(doc.CreateElement("BMECAT"));
var xsi = "http://www.w3.org/2001/XMLSchema-instance";
root.SetAttribute("xmlns:xsi", xsi); //set the namespace now
root.SetAttribute("schemaLocation", xsi, "http://www.adlnet.org/xsd/adlcp_v1p3");
root.SetAttribute("version", "2005");