سؤال

لقد واجهت مشكلة عندما أقوم بإنشاء مستند XML برمجيا باستخدام فئات System.xml ثم استخدم طريقة حفظ XML لا يستخدم إخراج XML qname for the nectes، ويستخدم فقط الأسماء المحلية.

على سبيل المثال النتيجة المرجوة

<ex:root>
  <ex:something attr:name="value">
</ex:root>

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

<root>
  <something name="value">
</root>

يتم تبسيط ذلك إلى حد ما لأن جميع المسامع الأسماء التي أستخدمها يتم تعريفها بالكامل باستخدام سمات XMLN على عنصر المستند لكنني حذفت ذلك من أجل الوضوح هنا.

أنا أدرك أن فئة الكتلة XML يمكن استخدامها لحفظ XMLDocument وأن هذا يأخذ فئة WholeWritettings ولكن لم أستطع معرفة كيفية تكوين هذا من هذا القبيل الذي أحصل على إخراج Qname الكامل.

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

المحلول

كما تقول، يحتاج عنصر الجذر إلى تعريف مساحة الاسم:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
    <iis:WebSite Id="asdf" />
</Wix>

رمز XML أعلاه:

XmlDocument document = new XmlDocument();
document.AppendChild(document.CreateXmlDeclaration("1.0", null, null));
XmlNode rootNode = document.CreateElement("Wix", "http://schemas.microsoft.com/wix/2006/wi");
XmlAttribute attr = document.CreateAttribute("xmlns:iis", "http://www.w3.org/2000/xmlns/");
attr.Value = "http://schemas.microsoft.com/wix/IIsExtension";
rootNode.Attributes.Append(attr);
rootNode.AppendChild(document.CreateElement("iis:WebSite", "http://schemas.microsoft.com/wix/IIsExtension"));
document.AppendChild(rootNode);

يبدو أن الشرط لتمرير مساحة الاسم أور كوسخة إلى أساليب Createattribute وطرائق الإبداع تبدو مضادة لأنه يمكن القول بأن المستند قادر على اشتقاق هذه المعلومات، ولكن مهلا، فهذه الطريقة التي يعمل بها.

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