ich eine XML-Datei, die die folgenden hat:Java XML-Parsing - die Ausgabe von xi verschmelzenden: include
<contexts>
<context name="a">
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="reuse.xml"/>
<other_stuff/>
</context>
<context name="b">
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="reuse.xml"/>
<other_stuff/>
</context>
</contexts>
... und die reuse.xml durch die XInclude, über dem so etwas wie dieses enthält verwiesen:
<good_stuff/><!-- and a bunch of complex stuff ->
ich versuche, einige Java-Code zu schreiben, die eine Schnur Ausgang für jeden Kontext Element erzeugen kann (leicht), aber statt der xi: Zeile enthalten, ersetzen, die mit dem Inhalt der Datei enthalten also geben Sie mir ein 'explodierter' String für jeden Kontext wie diesen:
<context name="a">
<good_stuff/><!-- and a bunch of complex stuff ->
<other_stuff/>
</context>
Eher als das, was ich bekomme jetzt:
<context name="a">
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="reuse.xml"/>
<other_stuff/>
</context>
Hoffentlich habe ich erkläre mich klar, dass ich das xi nicht will: Text in meiner Ausgabe enthalten, sondern der Inhalt der andere Datei sollte durch ersetzt werden.
Ich gründe der Parser XInclude zu sein und bewusst Namensraum:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setXIncludeAware(true);
...
dann die untergeordneten Knoten des Typs immer ich will (Typ gibt mir den Kontext, in diesem Fall).
NodeList result = doc.getElementsByTagName(type).item(0).getChildNodes();
Aber wenn ich über diese laufen und jedes Element auf den String mit folgendem passieren, wird die xi nicht ersetzen: include;
StringWriter sw = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.INDENT, "no");
serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
serializer.setOutputProperty(OutputKeys.STANDALONE, "yes");
serializer.transform(new DOMSource(element), new StreamResult(sw));
String result = sw.toString();
Gibt es eine Möglichkeit, dies mit dem JDK 8.7 integrierten XML-Parser zu tun, andere als String-Manipulation das xi zu ersetzen: include du?
Vielen Dank für Ihre Hilfe!
ich das xi ersetzen würde: include mich, aber ich habe nicht die Notwendigkeit für String-Manipulation sehen. Allerdings könnte eine xi: include-Funktion zur Verfügung gestellt werden, ich weiß es nicht. – LarsH
Ich würde vermuten, dass es ein Namespace-Problem ist, der W3C XInclude-Namespace ist "http: // www.w3.org/2001/XInclude" und nicht "http: // www.w3.org/2003/XInclude". –