在JAVA中,我使用importNode将节点从一个XML文档复制到另一个新文档。在原始文档中定义了一个xmlns,但在输出文档中,我希望不会为每个复制的元素定义xmlns。怎么做?如何避免在使用Java XML Transformer时添加XMLNS?
1
A
回答
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变压器。
1
你说你正在使用Java XML Transformer,但不清楚你是指标识转换器(TransformerFactory.newTransformer())还是Java接口到XSLT转换。
听起来好像您正在使用的操作在需要对其进行转换的操作时复制文档(例如,通过更改元素名称)。
相关问题
- 1. 避免随机添加xmlns属性
- 2. 避免在应用XSLT时在xml响应中添加xmlns属性
- 3. 如何在使用vbscript创建XML元素时避免xmlns属性?
- 4. 在xml中添加xmlns =“”
- 5. 如何在Java-XML中禁用/避免&符号转义?
- 6. 如何防止使用“HTML”方法的Java XML Transformer添加<META>标记?
- 7. 在Javascript中,如何避免在添加数组时添加NaN
- 8. 如何将xmlns添加到xml文档?
- 9. 如何避免在Java中使用“isDebugEnabled()”?
- 10. 使用Java XML Transformer和网络代理
- 11. 在Java中解析XML文件时如何避免读取DTD?
- 12. 如何避免在Java中
- 13. 如何在使用nuget包时避免生成xml文档
- 14. 避免在XML
- 15. 如何在使用DropShadowEffect时避免OutOfMemoryException?
- 16. 如何在使用BakcgroundWorker时避免invalidOperationException?
- 17. 如何在使用ArrayList时避免ConcurrentModificationException?
- 18. 如何避免在Java
- 19. 如何避免在java中
- 20. 如何在添加指令时多次避免角加载?
- 21. 如何在将对象序列化为XML时添加XML名称空间(xmlns)
- 22. 如何在使用emplace添加到std :: map时避免临时副本?
- 23. 如何避免在XML中使用XML :: Twig的属性交换
- 24. 在JAVA中使用cplex时如何避免内存泄漏?
- 25. 如何在java中使用BufferStrategy时避免黑线
- 26. XmlMassUpdate - 如何不添加xmlns?
- 27. 避免RTTI在Java
- 28. 避免在添加嵌入式闪存时使用“GET”方法
- 29. Java和XML:避免后向兼容
- 30. Oracle:加载java类时如何避免“java session state cleared”错误?
你知道怎么做才不至于XSL转换?我使用常规变换器,然后到我从原始XML复制的每个节点都添加了xmlns - 这是我不想要的。 – Inez
我想你的应用程序可以访问文档中的每个'Element'节点并使用'setPrefix(...)'来改变元素的前缀。有警告;阅读javadoc。 –