문제

이것은 아마도 순진한 질문 일 것입니다 XmlReader, 그러나 나는 MSDN 문서에서 답을 얻지 못했습니다.

XSD가 있다고 가정 해 봅시다 SchemaTest.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="pageSettings">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="width" type="xs:decimal" default="8.5" minOccurs="0"/>
        <xs:element name="height" type="xs:decimal" default="11" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

형식 XML 문서 SchemaTest.xml 이 스키마를 준수합니다

<?xml version="1.0" encoding="utf-8" ?>
<pageSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SchemaTest.xsd">
  <width/>
  <height>11</height>
</pageSettings>

그리고 나는이 문서를 XmlReader 다음과 같이.

static void Main(string[] args) {
    decimal width;
    decimal height;

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.IgnoreWhitespace = true;
    settings.Schemas.Add(null, "C:\\Projects\\SchemaTest\\SchemaTest\\SchemaTest.xsd");
    using (XmlReader reader = XmlReader.Create("C:\\Projects\\SchemaTest\\SchemaTest\\SchemaTest.xml", settings)) {
        reader.ReadStartElement();
        if (reader.Name == "width") {
            width = reader.ReadElementContentAsDecimal("width", "");
            // if fail, width = default from schema
        }
        if (reader.Name == "height") {
            height = reader.ReadElementContentAsDecimal("height", "");
            // if fail, height = default from schema
        }
        reader.ReadEndElement();
    }
}

현재 나는 a System.FormatException 요소의 내용을 나타냅니다 width 올바른 형식이 아닙니다. 그것은 보인다 reader 요소의 컨텐츠를 읽으려고 노력하고 있으며 스키마에 지정된 기본값으로 기본값이 없습니다. 이것을 처리하는 올바른 방법은 무엇입니까?

또한 요소의 경우 스키마는 요소가 빈 콘텐츠로 표시되지만 요소가 누락 된 경우 기본값을 제공하지 않는 경우 기본값 만 제공한다는 것을 이해하고 있습니다. 이것은 누락 된 선택적 요소에 대한 기본값을 얻을 방법이 없다는 것을 의미합니까?

도움이 되었습니까?

해결책

빈 요소로 작업하는 것에 관해서는 설정하십시오 settings.ValidationType = ValidationType.Schema 원하는대로 기본값을 가져와야합니다.

누락 된 요소와 관련하여, 그것들은 잘 고려되고, 누락 된 ;-) 따라서 기본값은 없습니다. 이론적으로, 스키마 (예 : 스키마 개체 모델을 사용하여)를 구문 분석하여 기본값을 얻을 수 있습니다. 그러나 그것은 사양에 위배 될 것입니다.

같은 속성 사용을 고려해 보셨습니까? <pageSettings height="55"/>? 이 시나리오에서는 누락 된 속성에 대한 기본값을 가져와야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top