[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends:00456] XSLT で変換後の属性名の順番



えんどうです。たまには質問させてください。

# おそらくFAQだと思いますが...

<?xml version="1.0" encoding="EUC-JP" ?>
<root>
  <hoge>
    <piyo>text/html; charset=euc-jp</piyo>
  </hoge>
</root>

この↑ようなXMLソースに、

<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
  <xsl:template match="hoge">
    <html>
      <head>
        <xsl:element name="meta">
          <xsl:attribute name="http-equiv">content-type</xsl:attribute>
          <xsl:attribute name="content">
            <xsl:value-of select="piyo"/>
          </xsl:attribute>
        </xsl:element>
      </head>
    </html>
  </xsl:template>
</xsl:stylesheet>

この↑ようなXSLを適用し、

    private static void saveTransformedHtml(String template, Document doc) {
        final String OUTPUT_FILENAME = "temp.xml";
        try {
            DOMResult result = new DOMResult();
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(
                    template));
            transformer.setOutputProperty("encoding", "EUC-JP");
            transformer.transform(new DOMSource(doc), result);

            Document dOutput = (Document) result.getNode();
            OutputFormat format = new OutputFormat(dOutput, "EUC-JP", true);
            DOMSerializer serializer = new XMLSerializer(new FileOutputStream(
                    OUTPUT_FILENAME), format).asDOMSerializer();
            serializer.serialize(dOutput);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }

    }

この↑ように変換すると、

<?xml version="1.0" encoding="EUC-JP"?>
<html>
    <head>
        <meta content="text/html; charset=euc-jp" http-equiv="content-type"/>
    </head>
</html>


このような結果が得られます。

[Q] 属性名の順番を制御し、
    <meta http-equiv="content-type" content="text/html; charset=euc-jp"/>
    という結果を得ることは可能でしょうか?

-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)