0
XMLを持っていますが、検証する必要はありませんし、シーケンスも、コードを書いていますが動作しません。XML検証XSDをC言語で使用していない場合#
XML
<?xml version="1.0" encoding="utf-8" ?>
<TXLife>
<UserAuthRequest>
<UserPswd>
<CryptType>NONE</CryptType>
<Pswd/>
</UserPswd>
<VendorApp>
<VendorName>AAA</VendorName>
<AppName>BBB</AppName>
</VendorApp>
</UserAuthRequest>
</TXLife>
XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchema1"
targetNamespace="http://tempuri.org/NewApplicationSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema1.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema1.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="TXLife">
<xs:complexType>
<xs:sequence>
<xs:element name="UserAuthRequest" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="UserLoginName" type="xs:string" minOccurs="1"></xs:element>
<xs:element name="UserPswd">
<xs:complexType>
<xs:sequence>
<xs:element name="CryptType" type="xs:string"></xs:element>
<xs:element name="Pswd"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="VendorApp">
<xs:complexType>
<xs:sequence>
<xs:element name="VendorName">
<xs:complexType>
<xs:attribute name="VendorCode" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="AppName" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="VendorCode" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
C#コード:
public void ValidateXML1()
{
List<string> _errors = new List<string>();
try
{
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add("http://tempuri.org/NewApplicationSchema.xsd", _sourceXsd);
XDocument doc = XDocument.Load(_sourceXml);
string msg = "";
doc.Validate(schemas, (o, e) =>
{
_errors.Add(e.Message);
msg += e.Message + Environment.NewLine;
});
}
catch (Exception e)
{
}
}
あなたは私がXML
で<UserLoginName>
を供給していませんでしたが、私のXSD
で、それはMだと見ることができるようにinOccures=1
、このコードを実行すると、 d error message =0
を示していますが、私は<UserLoginName>
値を供給しないというエラーが予想されます。
XMLはユーザー入力ですから、スキーマなしでそのXMLを検証する方法はありますか? –
それがうまくいくかどうかわかりませんが、 'schemas.Add(" "、_sourceXsd);' –
を試してください。XML文書にスキーマ内のtargetnamespace属性で定義された名前空間が含まれていない場合、正しく検証されません。したがって、スキーマを変更するかXMLを変更する2つのオプションがあります。いったん読み込まれると、コード内のXMLを変更して、名前空間をルート要素に強制することができます。 – Sprotty