1

XSDファイルがあります:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="someNameSpace"
    xmlns="someNameSpace"
    elementFormDefault="qualified">
...
</xs:schema>

Java コードの場合:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
dbf.setIgnoringComments(true);
dbf.setFeature("http://apache.org/xml/features/validation/schema", true);
dbf.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
dbf.setAttribute("http://apache.org/xml/properties/schema/external-schemaLocation", "someNameSpace file:///home/.../schema.xsd");

DocumentBuilder builder = dbf.newDocumentBuilder();
builder.setErrorHandler(new SomeHandlerImpl());
Document doc = builder.parse(input);

入力は次で始まるファイルです。

<?xml version="1.0" encoding="UTF-8"?>
<projekt xmlns="someNameSpace">

名前空間を削除してhttp://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation代わりhttp://apache.org/xml/properties/schema/external-schemaLocationにプロパティを使用すると、機能します。しかし、名前空間では、どうすればよいかまったくわかりません。

4

1 に答える 1

0

私はそれを解決しました。スキーマは次のように開始する必要があります。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://some/namespace/identifier"
    xmlns="http://some/namespace/identifier"
    elementFormDefault="qualified">

ルート開始タグは次のように定義されます。

<rootElement xmlns="http://some/namespace/identifier"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://some/namespace/identifier whatever.xsd">

最後に、コードを更新しました:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
SchemaFactory scf = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
URL schemaUrl = getClass().getResource(SCHEMAFILE);

dbf.setNamespaceAware(true);
dbf.setSchema(schema);

DocumentBuilder builder = dbf.newDocumentBuilder();
builder.setErrorHandler(errHandler);
Document doc = builder.parse(input);
于 2013-02-26T08:32:36.963 に答える