C# 使用c使用XmlDocument在根节点中获取schemalocation#

C# 使用c使用XmlDocument在根节点中获取schemalocation#,c#,xml,namespaces,C#,Xml,Namespaces,我必须从数据表中填充一个XML文件,我的问题是我必须在根节点中获取schemaLocation,为此,我使用下面的代码,然后我得到了这个结果,我不知道p1从哪里来请尝试此代码并告诉我这是否对您有帮助 特别是在这段代码中,我解析XML文件并获取根元素: 然后使用它选择所有名为schemaLocation的属性。只有一个,因此您可以使用SelectSingleNode: 变量 schemaLocationAttribute contanisValue属性,通过该属性可以获得实际值 X

我必须从数据表中填充一个XML文件,我的问题是我必须在根节点中获取schemaLocation,为此,我使用下面的代码,然后我得到了这个结果,我不知道p1从哪里来请尝试此代码并告诉我这是否对您有帮助

特别是在这段代码中,我解析XML文件并获取根元素:

然后使用它选择所有名为schemaLocation的属性。只有一个,因此您可以使用SelectSingleNode:

变量

schemaLocationAttribute

contanis
Value
属性,通过该属性可以获得实际值

        XmlReader xmlReader = XmlReader.Create("MyXML.xml");
        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.Load(xmlReader);

        XmlElement root = xmlDocument.DocumentElement;

        XmlNode schemaLocationAttribute = root.SelectSingleNode("//@*[local-name()='schemaLocation']");

        //Single schema value
        string schemaValue = schemaLocationAttribute.Value;

        //If you have multiple values in your schema 
        //you have to store it inside of array
        string[] multipleShcemavalues = schemaLocationAttribute.Value.Split(null);

        //And you have to choose whuickelement you want to use            
        string chooosendShcema = multipleShcemavalues[1];  //For example

在生成的XML中,p1是一个名称空间。您发布的代码(在屏幕截图中)正在定义名称空间“xsi”,我不确定为什么您的结果会生成p1,除非您在未显示的地方重命名xsi

XmlDocument doc = new XmlDocument();
XmlDeclaration declaire = doc.CreateXmlDeclaration("1.0", "utf-8", null);
XmlElement rootnode = doc.CreateElement("BMECAT");
doc.InsertBefore(declaire, doc.DocumentElement);
doc.AppendChild(rootnode);
rootnode.SetAttribute("version", "2005");
XmlAttribute atr = doc.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
atr.Value = "http://www.adlnet.org/xsd/adlcp.vlp3";
rootnode.SetAttributeNode(atr);
rootnode.Attributes.Append(atr);
在代码中:

XmlAttribute atr = doc.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
“xsi”是它生成的名称空间的名称,您可以在那里控制它。这导致:

<?xml version="1.0" encoding="utf-8"?>
<BMECAT version="2005" xsi:schemaLocation="http://www.adlnet.org/xsd/adlcp.vlp3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

请发布实际代码而不是屏幕截图。我在以下位置找到架构:
XmlElement.SetAttributeValue (localname, prefix, namespace, value)