2010-01-19 69 views
1

我與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

回答

0

嘗試用以下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());