Gibt es eine Java-XML-API, die Parsen ein Dokument, ohne auflösen von Zeichen-Entitäten?
Habe ich das Programm muss um XML zu Parsen, enthält Zeichen-entities. Das Programm selbst braucht nicht zu haben, Sie werden aufgelöst, und die Liste ist groß und wird sich ändern, so will ich vermeiden, explizite Unterstützung für diese Personen, wenn ich kann.
Hier ein einfaches Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<xml>Hello there &something;</xml>
Gibt es eine Java-XML-API, die Parsen ein Dokument erfolgreich ohne die Lösung (nicht-standard -) character-entities? Idealerweise würde übersetzen Sie in ein besonderes Ereignis oder Objekt, das könnte speziell behandelt, aber ich würde dich für eine option, die wäre lautlos verdrängen.
Antwort & Beispiel:
Skaffman gab mir die Antwort: verwenden Sie einen StAX-parser, mit IS_REPLACING_ENTITY_REFERENCES
auf false gesetzt.
Hier der code, den ich peitschte bis zu probieren Sie es aus:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
XMLEventReader reader = inputFactory.createXMLEventReader(
new FileInputStream("your file here"));
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isEntityReference()) {
EntityReference ref = (EntityReference) event;
System.out.println("Entity Reference: " + ref.getName());
}
}
Für die oben genannten XML -, es wird gedruckt "Entity Reference: something
".
Wenn Sie Entitäten in es Sie müssen definiert sein, oder Ihr Dokument nicht gültig ist.
InformationsquelleAutor Kaypro II | 2009-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die STaX-API die Unterstützung für die Vorstellung, nicht zu ersetzen, Zeichen-entity-Referenzen, durch die IS_REPLACING_ENTITY_REFERENCES Eigenschaft:
Dies kann eingestellt werden in eine
XmlInputFactory
, die dann wiederum verwendet, um den Bau einerXmlEventReader
oderXmlStreamReader
. Die API ist vorsichtig zu sagen, dass diese Eigenschaft dient nur zur Kraft die Umsetzung der Austausch, anstatt zwingen, es zu nicht ersetzen. Trotzdem ist es ja einen Versuch Wert.InformationsquelleAutor skaffman
Einem SAX-Parsen mit einer org.xml.sax.EntityResolver kann für Ihre Zwecke. Sie könnte für Sie sicher, Sie zu unterdrücken, und Sie wahrscheinlich könnte einen Weg finden, um Sie ungelöst lassen.
Diese tutorial scheint die meisten relevant: es zeigt, wie entities auflösen in strings.
InformationsquelleAutor Jim Ferrans
Ich bin kein Java-Entwickler, aber ich "glaube" Java-xml-Klassen unterstützen eine ähnliche Funktionalität .net für dies zu erreichen. IN .net das xmlreadersettings-Klasse legen Sie die ProhibitDtd-Eigenschaft false ist, und legen Sie die XmlResolver-Eigenschaft auf null. Dies bewirkt, dass der parser zu ignorieren extern referenzierten Entitäten, ohne eine Ausnahme zu werfen, wenn Sie gelesen werden. Ich habe gerade eine google-Suche nach "Java ignorieren enity" - und erhielt jede Menge Treffer, von denen einige scheinen dieses Thema ansprechen. Ich weiß, dies ist nicht eine absolute Antwort auf deine Frage, aber es sollte zeigen Sie Sie in eine nützliche Richtung.
InformationsquelleAutor bill seacham
Funktioniert für mich nur, wenn die Deaktivierung der Unterstützung von externen Entitäten:
InformationsquelleAutor user2050348