0

私はこのような次のXMLファイルを持っています:

<?xml version="1.0" encoding="utf-8"?>
<Config version="Vs1.00.00"><!-- xmlns="urn:xmldata-schema">-->

<<SystemSettings>
    <Workstation></Workstation>
    <Company></Company>
    <InstallationDate></InstallationDate>
    <SupportContactLine1></SupportContactLine1>
    <SupportContactLine2></SupportContactLine2>
    <SupportContactLine3></SupportContactLine3>
    <UserFile></UserFile>
</SystemSettings>

<Settings>
    <StartUpWorkspace></StartUpWorkspace>
    <StartLanguage></StartLanguage>
    <ExportPath></ExportPath>
    <ImportPath></ImportPath>
    <BackUpRestorePath></BackUpRestorePath>
    <AdjHistoryPath></AdjHistoryPath>
    <TestHistoryPath></TestHistoryPath>
    <LogFilePath></LogFilePath>
</Settings>

<DefaultSettings>
    <DefaultSupportLine1></DefaultSupportLine1>
    <DefaultSupportLine2></DefaultSupportLine2>
    <DefaultSupportLine3></DefaultSupportLine3>
    <DefaultUserFile></DefaultUserFile>
    <DefaultStartUpWorkspace></DefaultStartUpWorkspace>
    <DefaultStartLanguage></DefaultStartLanguage>
    <DefaultWorkspacePath></DefaultWorkspacePath>
    <DefaultExportPath></DefaultExportPath>
    <DefaultImportPath></DefaultImportPath>
    <DefaultBackUpRestorePath></DefaultBackUpRestorePath>
    <DefaultAdjHistoryPath></DefaultAdjHistoryPath>
    <DefaultTestHistoryPath></DefaultTestHistoryPath>
    <DefaultLogFilePath></DefaultLogFilePath>
    <DefaultMasterPassword crypt="No"></DefaultMasterPassword>
    <DefaultLogger></DefaultLogger>
</DefaultSettings>

</Config>

別のXMLファイルを検証する必要があります。ここにある私のファイルと同じ構造の別のXMLファイルをチェックする方法はありますか?

4

3 に答える 3

1

xml が適切かどうかを確認するには、XSD ファイルが必要です。xsd ファイルがない場合、一部のツールはxml から xsd を作成する場合がありますが、作成された xsd を変更する必要がある場合があります。

この回答では、XSD ファイルに対して c# で xml ファイルを検証する方法について説明します。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Config">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SystemSettings">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="Workstation"/>
              <xs:element type="xs:string" name="Company"/>
              <xs:element type="xs:string" name="InstallationDate"/>
              <xs:element type="xs:string" name="SupportContactLine1"/>
              <xs:element type="xs:string" name="SupportContactLine2"/>
              <xs:element type="xs:string" name="SupportContactLine3"/>
              <xs:element type="xs:string" name="UserFile"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Settings">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="StartUpWorkspace"/>
              <xs:element type="xs:string" name="StartLanguage"/>
              <xs:element type="xs:string" name="ExportPath"/>
              <xs:element type="xs:string" name="ImportPath"/>
              <xs:element type="xs:string" name="BackUpRestorePath"/>
              <xs:element type="xs:string" name="AdjHistoryPath"/>
              <xs:element type="xs:string" name="TestHistoryPath"/>
              <xs:element type="xs:string" name="LogFilePath"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DefaultSettings">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="DefaultSupportLine1"/>
              <xs:element type="xs:string" name="DefaultSupportLine2"/>
              <xs:element type="xs:string" name="DefaultSupportLine3"/>
              <xs:element type="xs:string" name="DefaultUserFile"/>
              <xs:element type="xs:string" name="DefaultStartUpWorkspace"/>
              <xs:element type="xs:string" name="DefaultStartLanguage"/>
              <xs:element type="xs:string" name="DefaultWorkspacePath"/>
              <xs:element type="xs:string" name="DefaultExportPath"/>
              <xs:element type="xs:string" name="DefaultImportPath"/>
              <xs:element type="xs:string" name="DefaultBackUpRestorePath"/>
              <xs:element type="xs:string" name="DefaultAdjHistoryPath"/>
              <xs:element type="xs:string" name="DefaultTestHistoryPath"/>
              <xs:element type="xs:string" name="DefaultLogFilePath"/>
              <xs:element name="DefaultMasterPassword">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute type="xs:string" name="crypt"/>
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element type="xs:string" name="DefaultLogger"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
于 2013-01-31T07:12:16.503 に答える
1

次のような xsd スキーマを作成できます。(@daryal の xml schema をお勧めしますが、xml 要素にいくつかの制約を課します。)

<xs:element name="SystemSettings">
<xs:complexType>
  <xs:sequence>
    <xs:element name="Workstation" minOccurs="0" maxOccurs="1" />
    ...
  </xs:sequence>
</xs:complexType>

...

次に、このコードを使用して検証を実行できます

using (var xsdStream = new MemoryStream(fXmlSchema))
        {
            xsdStream .Position = 0;
            using (var xsdReader = XmlReader.Create(xsdStream ))
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                settings.Schemas.Add(XmlSchema.Read(xsdReader , [performingValidationCallback]));

                using (var xmlStream = new MemoryStream(fXml))
                {
                    using (var xmlReader = XmlReader.Create(xmlStream, settings ))
                    {
                        try
                        {
                            xmlStream .Position = 0;
                            while (xmlReader .Read())
                            {
                            }
                        }
                        catch (XmlException e)
                        {
                            //VALIDATIONERROR
                        }
                    }
                }
            }
        }
于 2013-01-31T07:06:21.387 に答える
1

xml スキームを作成し、 XDocument.Validateメソッドを使用して、xml がスキームに準拠しているかどうかを確認する必要があります。

于 2013-01-31T07:08:48.007 に答える