避免随意添加xmlns属性

时间:2013-02-13 15:51:26

标签: sax xml-namespaces

我有两个Java项目副本。

运行此方法后:

private void editArtifactWSDL() {
    try {
        File outputfile = new File(
        "C:\\WorkSpace\\CMU\\WebContent\\WEB-INF\\bpelfiles\\process\\Artifacts.wsdl");

        File skeletonFile = new File(
        "C:\\WorkSpace\\CMU\\WebContent\\WEB-INF\\bpelfiles\\SkeletonArtifacts.wsdl");

        DocumentBuilderFactory docFactory = DocumentBuilderFactory
        .newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        Document doc = docBuilder.parse(skeletonFile);

        Element definitionsElement = doc.getDocumentElement();

        // xmlns attributes
        editDefinitionsElementToArtifact(doc, definitionsElement);

        // partnerLinkType elements
        appendPartnerLinkTypeElementsToArtifact(doc, definitionsElement);

        // import elements
        appendImportElementsToArtifact(doc, definitionsElement);

        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory
        .newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(outputfile);

        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(
        "{http://xml.apache.org/xslt}indent-amount", "2");
        transformer.transform(source, result);

        System.out.println("Artifact.wsdl saved!");

        } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
        } catch (TransformerException tfe) {
        tfe.printStackTrace();
        } catch (SAXException sxe) {
        sxe.printStackTrace();
        } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

在其中一个项目中我获得了“干净”Artifacts.wsdl。在另一个项目中,我将xmlns=""添加到某些元素中。

SkeletonArtifacts.wsdl非常相似(在http://www.diffnow.com/上比较)

那么这种随机行为的原因是什么?我是否摆脱了xmlns属性?

1 个答案:

答案 0 :(得分:0)

我通过使用以下代码制作DocumentBuilder NameSpaceAware来制作我的DocumentFactory NameSpaceAware:

docFactory.setNamespaceAware(true);

xmlns=""属性现已消失。

我仍然不明白为什么这会随机发生。另一个项目不会添加xmlns="",即使其DocumentBuilder不是NameSpaceAware。

对此的任何解释仍然是好的。

编辑:

设置NameSpaceAware后,我意识到在parsig之后添加的元素仍然是xmlns=""

我认为来自JRE7的Transfomer类存在冲突,并且在项目中添加了SAXON jar以集成ODE。