【问题标题】:how to remove the namespaces from the Element如何从元素中删除命名空间
【发布时间】:2011-01-06 22:19:00
【问题描述】:

我正在使用 org.w3c.xml java 库 并在执行一些任务时遇到一些困难:

  1. 我有一个 Element 对象;如何从中删除名称空间和前辈?
  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 是一个元素,但它不起作用;我做错了什么?

【问题讨论】:

  • “不起作用”不足以得到答案。 以什么方式不起作用?你有例外吗?如果是,是什么?
  • 而且我不相信您在调用setNamespaceAware(false) 后仍然会在 DOM 中看到命名空间。请显示演示问题的完整代码。
  • 发誓...今天晚些时候我会编辑我的帖子...感谢您的帮助。

标签: java xml xmldocument java-6


【解决方案1】:

尝试使用以下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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多