سؤال

أحتاج إلى إنشاء ملف XML في جافا، لذلك اخترت استخدام DOM (حتى يكون هناك كل شيء على ما يرام)، إليك العلامة الجذرية لما أحتاج إليه

<?xml version="1.0" encoding="utf-8"?>
<KeyContainer Version="1.0" xmlns="urn:ietf:params:xml:ns:keyprov:pskc:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:xml="http://www.w3.org/XML/1998/namespace">

هنا هو شفصي المصدري

PrintWriter out = new PrintWriter(path);
Document xmldoc = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        DOMImplementation impl = builder.getDOMImplementation();
        Element e = null;
        Node n = null;
        xmldoc = impl.createDocument(null, "KeyContainer", null);
        /* Noeuds non bouclés */
        Element keycontainer = xmldoc.getDocumentElement();
            keycontainer.setAttributeNS(null, "Version", "1.0");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:ds","http://www.w3.org/2000/09/xmldsig#");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xenc", "http://www.w3.org/2001/04/xmlenc#");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xml", "http://www.w3.org/XML/1998/namespace");
            keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "urn:ietf:params:xml:ns:keyprov:pskc:1.0");
/* Non relevant Info*/
DOMSource domSource = new DOMSource(xmldoc);
        StreamResult streamResult = new StreamResult(out);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING,"utf-8");
        serializer.setOutputProperty(OutputKeys.VERSION,"1.0");
        serializer.setOutputProperty(OutputKeys.INDENT,"yes");
        serializer.setOutputProperty(OutputKeys.STANDALONE,"yes");
        serializer.transform(domSource, streamResult); 

وهنا ما أحصل عليه

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<KeyContainer xmlns="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Version="1.0">

المشكلة هي خاصية XMLNS فارغة، و XMLNS: XML مفقود، ماذا يمكنني أن أفعل للحصول على جميع المعلومات؟

شكرا لك الكثير stackoverflow

(ملاحظة: حصلت على namespace_err إذا كان أي شيء آخر غير "http://www.w3.org/2000/xmlns/"في مجال Namespaceuri)

هل كانت مفيدة؟

المحلول

هناك مطلوبة شيئين للتخلص من xmlns=""

إنشاء Document مع مساحة الاسم المرغوبة URI على هذا النحو:

xmldoc = impl.createDocument("urn:ietf:params:xml:ns:keyprov:pskc:1.0", "KeyContainer", null);

قم بإزالة السطر التالي كما هو غير ضروري الآن:

keycontainer.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "urn:ietf:params:xml:ns:keyprov:pskc:1.0");

فيما يتعلق xmlns:xml السمة، واجهة برمجة التطبيقات تسقطها بصمت. انظر الخط 173 من NamespaceMappings. وبعد يحول القليل من الأبحاث إلى أن سلوك الإعلان عن مساحة الاسم الخاصة غير محددة ولا ينصح بها.

نصائح أخرى

لجعل مساحة اسم DOM علم، لا تنس أن تمكنها في المستندات باستخدام setNamespaceAware طريقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top