Java Dom XML هو تخطي خصائص XMLNS
-
18-09-2019 - |
سؤال
أحتاج إلى إنشاء ملف 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
طريقة.