1

最近、XmlValidatingReader を XmlReader に置き換え、XmlReaderSettings を使用して xml を xsd で検証しました。

CustomData cd = null;
using (Stream xsdStream = new FileStream(m_DXsdFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
  XmlTextReader sr = new XmlTextReader(xsdStream);
  using (Stream xmlStream = new FileStream(m_DXmlFile, FileMode.Open, FileAccess.Read, FileShare.Read))
  {
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(null, sr);
    XmlReader reader = XmlReader.Create(xmlStream, settings);

    try
    {
      XmlSerializer xmlSerializer = CreateDefaultXmlSerializer(m_Type);
      cd = (CustomData)xmlSerializer.Deserialize(reader);
    }

  ...
}

XML:
<Column Name="Content">
  <Data xsi:type="xsd:string"> * info info info
info info info
 info info info</Data>
  <Data xsi:type="xsd:string">/* This is a test */</Data>
</Column>
<Column Name="ErrorNr">
  <Data xsi:type="xsd:int">2</Data>
  <Data xsi:type="xsd:int">2</Data>
  <Data xsi:type="xsd:int">2</Data>
</Column>

CreateDefaultXmlSerializer() は、ここで提案されているように実装されています: https://stackoverflow.com/a/9416860/2107510

ただし、XmlReader はすべての改行を正規化し、\r\n を \n に変換します。これは、複数行ではなく 1 行を表示する複数行のテキスト ボックスでは認識されません。

XmlWriterSettings.NewLineHandling.Entitize を使用してみましたが、問題は解決しましたが、ワードパッドやその他のテキスト エディターなどで XML ドキュメントを読み取れなくなりました。( http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinehandling.aspx )

正規化のために複数行の文字列を失うことなく保持するにはどうすればよいですか? (そして他の厄介な副作用なしで)

4

1 に答える 1

1

Xmlリーダーの作成から(強調鉱山):

要求に応じてエンティティを展開する必要がある場合 (Create メソッドによって作成されたリーダーがすべてのエンティティを展開する)、またはテキスト コンテンツを正規化したくない場合は、クラスを使用しXmlTextReaderます。

于 2013-02-25T15:42:12.343 に答える