2011-06-19 48 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转换。

听起来好像您正在使用的操作在需要对其进行转换的操作时复制文档(例如,通过更改元素名称)。

相关问题