如何从元素中删除的命名空间

问题描述:

我与org.w3c.xml Java库 工作,遇到一些困难执行一些任务:如何从元素中删除的命名空间

  1. 我有一个元素对象;我怎样才能从它和前辈中删除命名空间?
  2. 如何在不使用名称空间的情况下创建文档?我试过

    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
    docBuilderFactory.setNamespaceAware(false); 
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse (new File("C:/Temp/XMLFiles/"+fileName+".xml")); 
    

    虽然它看起来很有前途,但它并不真正的工作。我仍然在使用命名空间获取文档。

  3. 如何从元素创建文档?

    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 
    doc.adoptNode(dataDefinition); 
    

    其中dataDefinition是一个元素,但它没有工作;我究竟做错了什么?

+0

“不工作” 是不足以得到答案。 *以什么方式*不起作用?你有例外吗?如果是,那是什么? – kdgregory 2010-01-20 13:17:05

+0

我不相信在调用'setNamespaceAware(false)'后,你仍然看到DOM中的命名空间。请显示证明问题的完整代码。 – kdgregory 2010-01-20 13:55:39

+0

发誓...今天晚些时候生病编辑我的帖子...感谢您的帮助。 – special0ne 2010-01-21 07:26:33

尝试用以下XSL改造它:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="no"/> 

<xsl:template match="/|comment()|processing-instruction()"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:element> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:attribute name="{local-name()}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

Transformer xformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new FileInputStream("xform.xsl"))); 
StringWriter writer = new StringWriter(); 
xformer.transform(new StreamSource(new FileInputStream("input.xml")), new StreamResult(writer)); 
System.out.println(writer.toString());