Der Namespace xmlns ist in "parent" definiert und wird in "child" überschrieben. Da mein xsi in "parent" und "child" identisch ist, muss ich auch den xsi-Namespace in "child" überschreiben?Was passiert mit einem Namespace, der zu einem überschriebenen Namespace gehört?
<parent xmlns="namespace_A" xmlns:xsi="namespace_C" xsi:schemaLocation="namespace_D">
<child xmlns="namespace_B" xsi:schemaLocation="namespace_E">
</child>
</parent>
Alle Online-Validierer Ich habe versucht, die XML überprüfen als akzeptiert, aber ich erhalte eine Fehlermeldung, wenn die XML-Verarbeitung, die xsi sagt nicht in „Kind“ gebunden.
Der besondere Code, wo ich dieses Problem habe, ist:
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2017-08-24T12:54:26</responseDate>
<request verb="ListRecords" from="2017-08-08" set="J:10.1007:53599" metadataPrefix="CR_UNIXML" resumptionToken="91554975-0bb1-4cf5-86ae-b2222e6fe01f">http://oai.crossref.org/OAIHandler</request>
<!-- recipient 96 crlabs2 -->
<ListRecords>
<record>
<header>
<!-- citation-id: 92292627; type: JOURNAL_ARTICLE; -->
<identifier>info:doi/10.1007/s40278-017-34281-1</identifier>
<datestamp>2017-08-11</datestamp>
<setSpec>J</setSpec>
<setSpec>J:10.1007</setSpec>
<setSpec>J:10.1007:53599</setSpec>
</header>
<!-- [email protected] -->
<metadata>
<crossref xmlns="http://www.crossref.org/xschema/1.1" xsi:schemaLocation="http://www.crossref.org/xschema/1.1 http://www.crossref.org/schema/unixref1.1.xsd">
Dies ist die xml als Antwort von einem externen Dienstleister gegeben ist. Ich möchte nur durch den gleichen Außendienst gegeben einige der Daten mit einem Prozessor verarbeiten, die XSLT-Dateien akzeptiert, die gewünschten Daten abrufen, aber ich erhalte die folgenden Fehler:
ERROR: 'The prefix "xsi" for attribute "xsi:schemaLocation" associated with an element type "crossref" is not bound.'
ERROR: 'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: The prefix "xsi" for attribute "xsi:schemaLocation" associated with an element type "crossref" is not bound.'
Der Fehler in der Klasse XMLNSDocumentScannerImpl auftritt, Verfahren scanStartElement(). In der folgenden Schleife ist die uri Null und der Fehler wird ausgelöst.
// bind attributes (xmlns are already bound bellow)
int length = fAttributes.getLength();
// fLength = 0; //initialize structure
for (int i = 0; i < length; i++) {
fAttributes.getName(i, fAttributeQName);
String aprefix = fAttributeQName.prefix != null
? fAttributeQName.prefix : XMLSymbols.EMPTY_STRING;
String uri = fNamespaceContext.getURI(aprefix);
// REVISIT: try removing the first "if" and see if it is faster.
//
if (fAttributeQName.uri != null && fAttributeQName.uri == uri) {
// checkDuplicates(fAttributeQName, fAttributes);
continue;
}
if (aprefix != XMLSymbols.EMPTY_STRING) {
fAttributeQName.uri = uri;
if (uri == null) {
fErrorReporter.reportError(XMLMessageFormatter.XMLNS_DOMAIN,
"AttributePrefixUnbound",
new Object[]{fElementQName.rawname,fAttributeQName.rawname,aprefix},
XMLErrorReporter.SEVERITY_FATAL_ERROR);
}
fAttributes.setURI(i, uri);
// checkDuplicates(fAttributeQName, fAttributes);
}
}
Wenn Ihre Datei wirklich so startet (Sie zeigen nicht, wie es schließlich endet), dann ist ja, geben Sie diesen Fehler ein Problem auf der Prozessor-Seite. Ich kann Xerces jedoch nicht dazu bringen, mit diesem Fehler zu scheitern. Können Sie zeigen, welcher Java-Code diesen Fehler auslöst? – kumesana
Die Frage wurde erneut mit dem Code aktualisiert, der den Fehler in Xerces triggert. – nrad0