美好的一天。
据我所知。 XML文件中有一个根元素。
但是从XSD文件结构来看,获取根元素值并不容易。 有没有办法做到这一点?
(我不想在我的项目中使用硬代码来查找XSD根元素值。 我想找到“RootValueHere”的根元素
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="RootValueHere">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="DocumentInfo" minOccurs="1" maxOccurs="1" />
<xsd:element ref="Prerequisite" minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Element of DocumentInfo -->
<xsd:element name="DocumentInfo">
<xsd:complexType>
<xsd:attribute name="Name" type="xsd:string" />
<xsd:attribute name="Description" type="xsd:string" />
<xsd:attribute name="Creator" type="xsd:string" />
<xsd:attribute name="CreateTime" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<!-- Element of Prerequisite -->
<xsd:element name="Prerequisite">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Type" type="Prerequisite.Type.type" minOccurs="1" maxOccurs="1" />
<xsd:element name="Miscellaneous" type="Prerequisite.Misc.type" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
谢谢。
答案 0 :(得分:5)
虽然单个文档只能包含一个根元素,但XSD实际上可以定义multiple valid root elements。
如果您只是真的希望单个类型作为根元素有效,那么它应该是唯一被引用为<element>
的类型。
例如,在上面的模式中,DocumentInfo和Prerequisite节点也是有效的根元素。要将架构限制为只有一个有效的根节点,请将DocumentInfo和Prerequisite元素替换为简单的complexType定义:
<xsd:complexType name="DocumentInfoType">
...
</xsd:complexType>
<xsd:complexType name="Prerequisite">
....
</xsd:complexType>
更新:要访问元素的名称,您只需要查看XmlElement上的Name属性:
XmlDocument doc = new XmlDocument();
doc.Load("D:\\schema.xsd"); // Load the document from the root of an ASP.Net website
XmlElement schemaElement = doc.DocumentElement; // The root element of the schema document is the <schema> element
string elementName = schemaElement.LocalName; // This will print "schema"
foreach (XmlNode ele in schemaElement.ChildNodes)
{
if (ele.LocalName == "element")
{
// This is a valid root node
// Note that there will be *more than one* of these if you have multiple elements declare at the base level
}
}
答案 1 :(得分:1)
我相信
XmlDocument myDocument = new XmlDocument("my.xml");
myDocument.DocumentElement(); //gets root document node