كيفية إضافة (أو تجاهل) اسم اسم XML عند استخدام Xelement.lation

StackOverflow https://stackoverflow.com/questions/1453564

  •  12-09-2019
  •  | 
  •  

سؤال

أنا أقوم بإنشاء XML باستخدام LinQ إلى XML و C #. كل ذلك يعمل بشكل رائع إلا عندما أحتاج إلى إضافة صف يدويا في XML. يضاف هذا الصف فقط إذا كان لدي قيمة لتمريرها إليها، وإلا فإنني أتجاهل العلامة بأكملها.

يمكنني استخدام Xelement.LELLOM للتحميل في سلسلة النص الذي أقوم بتخزينه في سلسلة ولكن عندما أرفقه على XML يضع دائما في xmlns = "" في نهاية العلامة الخاصة بي.

هل هناك طريقة أستطيع أن أقول Xelement.LEMLOMS لتحميل استخدام مساحة الاسم الموجودة أو تجاهلها عند وضع السلسلة إلى XML؟

من الناحية المثالية، أريد فقط أن يتم تضمين سلسلة بلدي إلى XML التي يتم إنشاؤها دون إضافة علامات إضافية.

أدناه هي عينة من ما أقوم به حاليا:

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";

عندما أقوم ببناء XML أحمل السلسلة أعلاه في XML الخاص بي. إنه هنا حيث يتم إضافة xmlns = "" "" "" "" يتم إضافته إلى قيمة XMLDETAILS ولكن من الناحية المثالية أريد أن يتم تجاهل ذلك لأنه يسبب مشكلات مع المستلم عند محاولة قراءة هذه العلامة.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",

... رمز XML الخاص بي ...

XElement.Load(new StringReader(XMLDetails))

... نهاية رمز XML ...

كما ذكر أعلاه. يعمل الرمز الخاص بي، إنه يخرج بنجاح XML بالنسبة لي. إنها مجرد علامة MyNewTag التي قمت بتحميلها في استخدام Xelement.LEMLOAD GOOD XMLNS = "" "تمت إضافته إلى نهاية الأمر الذي يسببني مشكلة.

أي أفكار كيف يمكنني العمل حول هذا؟ شكرا لمساعدتك.

التحيات غنية

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

المحلول

ماذا عن:

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());

كبديل أفضل - لماذا لا تشمل مساحة الاسم عند إنشاء XML، أو حتى أفضل، قم بإنشاء XElement بدلا من إنشاء سلسلة XML يدويا التي تقرأها بعد ذلك. إن إنشاء XML يدويا نادرا ما تكون فكرة جيدة. بصرف النظر عن أي شيء آخر، فأنت تولى ذلك ValuePassedThrough وقد هرب بالفعل، أو لا يحتاج إلى الهروب وما إلى ذلك مايو تكون صالحة - لكنها على الأقل سبب للقلق.

نصائح أخرى

مثله

XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            XMLDetails));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top