2011-06-19 49 views

回答

1

javax.xml.transform.Transformer中使用具有如下定義XSL似乎是一個很好的解決方案:

String stylesheet = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
      "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" + 
      "<xsl:output method=\"xml\" version=\"1.0\" indent=\"no\"/>" + 
      "<xsl:template match=\"*\">" + 
      "<xsl:element name=\"{local-name()}\">" + 
      "<xsl:for-each select=\"@*\">" + 
      "<xsl:attribute name=\"{local-name()}\">" + 
      "<xsl:value-of select=\".\"/>" + 
      "</xsl:attribute>" + 
      "</xsl:for-each>" + 
      "<xsl:apply-templates/>" + 
      "</xsl:element>" + 
      "</xsl:template>" + 
      "</xsl:stylesheet>"; 

    StreamSource xslSource = new StreamSource(new StringReader(stylesheet)); 
    Transformer transformer = tf.newTransformer(xslSource); 
1

這取決於你的意思。當XML文檔具有xmlns時,它實際上是元素名稱的縮寫;例如如果XMLNS是「http://example.com/#」,那麼真元爲

<foo attr="xxx">...</foo> 

名字是http://example.com/#foo,你將無需通過xmlns如果你想寫成

<http://example.com/#foo attr="xxx">...</http://example.com/#foo> 

您輸出XML看起來像這樣,應該可以通過調整XML編寫器參數來實現它。

如果你希望你的輸出XML看起來像原始的,但沒有xmlns,你實際上是改變了XML的含義。乾淨的方法是使用XSL變壓器。

+0

你知道怎麼做纔不至於XSL轉換?我使用常規變換器,然後到我從原始XML複製的每個節點都添加了xmlns - 這是我不想要的。 – Inez

+0

我想你的應用程序可以訪問文檔中的每個'Element'節點並使用'setPrefix(...)'來改變元素的前綴。有警告;閱讀javadoc。 –

1

你說你正在使用Java XML Transformer,但不清楚你是指標識轉換器(TransformerFactory.newTransformer())還是Java接口到XSLT轉換。

聽起來好像您正在使用的操作在需要對其進行轉換的操作時複製文檔(例如,通過更改元素名稱)。

相關問題