Pengesahan XML dan penstriman input menggunakan XSD dimuatkan sebagai fail
Di bawah bimbingan editor PHP Strawberry, kami akan meneroka kaedah pengesahan XML dan penstriman input menggunakan XSD dimuatkan sebagai fail. Apabila kami berurusan dengan data XML, pengesahan adalah langkah yang sangat penting untuk memastikan ketepatan dan kesempurnaan data. Dengan menggunakan fail XSD (XML Schema Definition), kami boleh menentukan struktur dan kekangan dokumen XML. Dengan memuatkan fail XSD dan menggunakannya untuk mengesahkan aliran XML yang masuk, kami boleh mengesan dan mengendalikan data tidak mematuhi dengan mudah, dengan itu meningkatkan kebolehpercayaan dan keselamatan aplikasi kami. Seterusnya, kami akan memperincikan cara menggunakan fail XSD untuk pengesahan XML dan pemprosesan aliran input.
Kandungan soalan
Saya mengalami tingkah laku yang berbeza dalam pengesahan xml jika xsd dimuatkan sebagai fail atau sumber.
Jika saya memuatkan xsd sebagai fail, semuanya baik dan pengesahan berfungsi dengan baik:
schemafactory sf = schemafactory.newinstance(xmlconstants.w3c_xml_schema_ns_uri); schema schema = sf.newschema(new classpathresource("my/perfect/path/myfile.xsd").getfile()); validator validator = schema.newvalidator(); validator.validate(sourcetovalidate);
Sebaliknya, kerana saya memutuskan untuk memasukkan fail xsd ke dalam balang, saya memuatkannya sebagai sumber, tetapi kelakuannya berbeza, apabila saya membina skema, saya terperangkap dalam saxparseexception dan ralat mengadu tentang beberapa isu dalam fail xsd Nama diselesaikan kepada definisi jenis. Fail xsd betul betul
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); InputStream inputStream = getClass().getClassLoader().getResourceAsStream("my/perfect/path/myFile.xsd"); Source schemaSource = new StreamSource(inputStream); Schema schema = sf.newSchema(schemaSource); // here i get the SAXParseException Validator validator = schema.newValidator(); validator.validate(sourceToValidate);
Saya benar-benar tidak faham mengapa memuatkan xsd sebagai resourceasstream menghasilkan tingkah laku yang berbeza
Saya menggunakan jaxb untuk pengesahan xml
Penyelesaian
Tekaan saya ialah xsd anda merujuk kepada xsd lain, dan pengesah anda tidak tahu cara menyelesaikan rujukan tersebut.
Anda mungkin perlu menyediakan lsresourceresolver kepada validator
classloader loader = getclass().getclassloader(); lsresourceresolver resolver = new lsresourceresolver() { public lsinput resolveresource(string type, string namespaceuri, string publicid, string systemid, string baseuri) { inputstream stream = loader.getresourceasstream(systemid); if (stream == null) throw new runtimeexception("could not find " + systemid); lsinput input = new dominputimpl(); input.setpublicid(publicid); input.setsystemid(systemid); input.setbaseuri(baseuri); input.setbytestream(stream); return input; } }; validator validator = schema.newvalidator(); validator.setresourceresolver(resolver);
Anda juga perlu menghubungi streamsource
的两个参数构造函数来在 inputsource
上设置 systemid
.
String xsdPath = "my/perfect/path/myFile.xsd"; InputStream inputStream = getClass().getClassLoader().getResourceAsStream(xsdPath); Source schemaSource = new StreamSource(inputStream, xsdPath);
Lihat sumber aliran(strim masukan, rentetan)
Atas ialah kandungan terperinci Pengesahan XML dan penstriman input menggunakan XSD dimuatkan sebagai fail. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

