XMLWriter يهرب فقط من نوع واحد من الاقتباس
سؤال
إليك بعض الرمز C#:
var sb = new StringBuilder();
var w = XmlWriter.Create(sb);
w.WriteStartElement("hello");
w.WriteAttributeString("target", "world ' \" !");
w.WriteEndElement();
w.Flush();
// then look at sb.ToString()
أحصل على سلسلة تشبه:
<?xml version="1.0" encoding="utf-16"?><hello target="world ' " !" />
إنه يهرب فقط من الكلمة المزدوجة ، وليس الكبولة الواحدة. لكن مستندات XMLWriter.WriteAttributestring (سلسلة ، سلسلة) تقول:
إذا كانت قيمة السمة تتضمن عروض أسعار مزدوجة أو واحدة ، فسيتم استبدالها بـ "و" على التوالي.
هل هناك بعض العلم الذي أحتاج إلى ضبطه لجعله يفعل ما تقوله المستندات؟
المحلول
إذا كنت تستخدم .NET Reflector للنظر في الكود ، فستجد أن System.xml.xmlTextEncoder.write (سلسلة) يتم استدعاؤه. إليك مدونة الاهتمام:
if (!this.inAttribute || (this.quoteChar != ch))
this.textWriter.Write('\'');
else
this.WriteEntityRefImpl("apos");
عند كتابة قيمة السمة ، لا يتم هروب عرض أسعار واحد لأنه لا يلزم أن يكون. فقط عند كتابة عنصر نص يتم استخدامه "".
نصائح أخرى
هذا ليس خطأ في XmlWriter
, ، إنه خطأ في نظامك القديم.
إذا نظرت إلى تعريف AttValue
في توصية XML 1.0 ، سترى أن XmlWriter
يفعل بالضبط ما يفترض أن يفعله: إذا تم تحديد قيمة السمة مع علقات ، يمكن أن تحتوي قيمة السمة على علامات اقتباس ، وإذا تم تحديدها باستخدام علامات الاقتباس ، يمكن أن تحتوي قيمة السمة على عميل.
يمكن ، من المتصور ، استخلاص فئة من XmlTextWriter
وتجاوزها WriteAttributes
و WriteAttributeString
طُرق. التي يمكن أن تعمل. احترس من مساحات الأسماء والترميز إذا قمت بذلك.