Как выбрать SimpleType из базового файла в XSD при разборе в C #

1

У меня есть один файл с именем base.xsd, и у меня есть структура вроде этого: -

 <?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:simpleType name="StringNotNull">
        <xsd:restriction base="xsd:normalizedString">
            <xsd:minLength value="1"/>
            <xsd:maxLength value="50"/>
        </xsd:restriction>
    </xsd:simpleType>

<xsd:complexType name="AssemblyTimeDimension">
    <xsd:simpleContent>
        <xsd:extension base="xsd:positiveInteger">
            <xsd:attribute name="unitOfMeasure" type="AssemblyTimeUnitOfMeasure" use="required"/>
        </xsd:extension>
    </xsd:simpleContent>
</xsd:complexType>
<xsd:simpleType name="AssemblyTimeUnitOfMeasure">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="minutes"/>
        <xsd:enumeration value="hours"/>
        <xsd:enumeration value="days"/>
        <xsd:enumeration value="weeks"/>
        <xsd:enumeration value="months"/>
        <xsd:enumeration value="years"/>
    </xsd:restriction>
</xsd:simpleType>
</xsd:schema>

У меня есть другой файл, в котором у меня есть такая структура:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xsd:include schemaLocation="base.xsd"/>
    <xsd:element name="BabyProducts">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="AlertType" type="StringNotNull" minOccurs="0"/>
<xsd:element name="AssemblyTime" type="AssemblyTimeDimension" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

У меня есть элементы schemaTypeName.Name в переменной String. Как я могу найти SimpleType в base.xsd с этим именем и его подтеками?

Теги:
xsd

1 ответ

0
Лучший ответ

Если вы пытаетесь разобрать/прочитать XML, вы можете Linq XML. В следующем примере показано, как анализировать и получать доступ к элементам/атрибутам. Возможно, вы захотите добавить некоторую проверку ошибок (нулевые или допустимые значения и т.д.). Вы проверили бы против имени schemaTypeName.Name по сравнению с a.Value в первом поиске ниже.

XDocument doc = XDocument.Load("base.xsd");
var element = doc.Descendants()
                 .FirstOrDefault(e => e.Attributes()
                 .Any(a => a.Name=="name" && a.Value == "StringNotNull")) as XElement;

var minLength = element.Descendants()
                       .FirstOrDefault(e => e.Name.LocalName == "minLength")
                       .Attribute("value").Value;
var maxLength = element.Descendants()
                       .FirstOrDefault(e => e.Name.LocalName == "maxLength")
                       .Attribute("value").Value;

Для проверки схемы хорошим вариантом будет использование фактического валидатора схемы.

  • 0
    какая ссылка на XDocument? @loopedcode
  • 0
    использование System.Xml.Linq; См .: msdn.microsoft.com/en-us/library/…
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню