Как найти корневой элемент XSD в C # - PullRequest
4 голосов
/ 21 декабря 2009

Добрый день.

Как я знаю. В файле 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>

спасибо.

Ответы [ 2 ]

5 голосов
/ 21 декабря 2009

Хотя один документ может содержать только один корневой элемент, поскольку XSD может фактически определить несколько действительных корневых элементов .

Если вы действительно хотите, чтобы единственный тип был действительным в качестве корневого элемента, то это должен быть единственный тип, на который ссылается <element>.

Например, в приведенной выше схеме узлы DocumentInfo и Prerequisite также являются допустимыми корневыми элементами. Чтобы ваша схема имела только один действительный корневой узел, замените элементы DocumentInfo и Prerequisite простыми определениями complexType:

<xsd:complexType name="DocumentInfoType">
    ...
</xsd:complexType>
<xsd:complexType name="Prerequisite">
    ....
</xsd:complexType>

ОБНОВЛЕНИЕ: Чтобы получить доступ к имени элемента, вам просто нужно взглянуть на свойство Name в XmlElement:

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 голос
/ 21 декабря 2009

Я верю

XmlDocument myDocument = new XmlDocument("my.xml");
myDocument.DocumentElement(); //gets root document node
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...