2016-07-19 3 views
1

Ich habe eine XML-Datei, die eine zugehörige XSL-Datei verweist, wie folgt aus:Wie ruft man XML <? Xml-stylesheet ...?> Anweisungen in Java auf?

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet href="my-transform.xsl"?> 

<my-root> ..... 

und ich möchte es lesen in als org.w3c.dom.Document, die Anwendung der Transformation.

Ich überlege mir, es einzulesen, die Stylesheet-Verarbeitungsanweisung mit XPATH /processing-instruction('xml-stylesheet') extrahieren und dann die XSL-Datei von Hand laden und mit einer Transformer anwenden.

Aber es scheint seltsam, dass ich das manuell tun muss - gibt es eine nette Möglichkeit, die Datei zu lesen und die eingebettete Transformation automatisch anzuwenden?

UPDATE: Dank @ Raphaëλ für die Beobachtung, dass TransformerFactory.getAssociatedStylesheet(...) den Xml-Stylesheet-Wert als Source identifizieren wird, die ziemlich nah ist. Gibt es etwas automatischeres als das?

+0

Ist es notwendig, XSL in XML einzubetten, oder ist ein anderer Ansatz in Ordnung? – nawazlj

+1

können Sie 'getAssociatedStylesheet' verwenden (https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#getAssociatedStylesheet-javax.xml.transform.Source-java.lang. String-java.lang.String-java.lang.String-), um die 'Quelle' zu ​​erhalten –

+0

@nawazlj Idealerweise sollte das XML das Stylesheet angeben, weil das XML tatsächlich von meinen nachgeschalteten Client-Benutzern geschrieben wird. Ich verkaufe ihnen die Idee, ihre XML-Datei anzupassen, indem sie sie XSLT-Dateien geben, damit sie ihre eigenen shorthands entwickeln und zusammen mit XML an mich senden können. In der Tat haben sie bereits ihre Kurzschrift entwickelt, aber es ist in ihrem Build-Prozess und ich versuche, es als Teil meiner Dienstleistung für sie einzubringen. Also muss _their_ XML angeben, welche ihrer Stylesheets _I_ anzuwenden sind, wenn dies sinnvoll ist. – SusanW

Antwort

0

Ok, niemand anders antwortete, und ich kenne die Antwort jetzt. Stylesheets werden nicht automatisch angewendet. Aber Sie können das Stylesheet unter Verwendung TransformerFactory.getAssociatedStylesheet(...) erhalten, die den xml-stylesheet-Wert als Source identifizieren wird. Sie können es dann manuell anwenden.

Dank raphaëλ für das darauf hinweist.

Verwandte Themen