سؤال

أنا أستخدم XsltCompiledTransform لتحويل بعض XML إلى جزء من HTML (ليس مستند HTML كاملاً، بل مجرد DIV سأدرجه في الصفحة التي تم إنشاؤها في مكان آخر).

أقوم بالتحول على النحو التالي:

StringBuilder output = new StringBuilder();

XmlReader rawData = BusinessObject.GetXml();
XmlWriter transformedData = XmlWriter.Create(output);

XslCompiledTransform transform = new XslCompiledTransform();

transform.Load("stylesheet.xslt");

transform.Transform(rawData, transformedData);

Response.Write(output.ToString());

مشكلتي هي أن نتيجة التحويل تبدأ دائمًا بتوجيه XML هذا:

<?xml version="1.0" encoding="utf-16"?>

كيف أمنع هذا من الظهور في بياناتي المحولة؟

يحرر:

أنا أخبر XSLT أنني لا أريد أن يقوم بإخراج إعلان XML به

<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>

ولكن يبدو أن هذا ليس له أي تأثير على التوجيه الذي يظهر في مخرجاتي.

ومن المثير للاهتمام أن كلاً من مصدر بيانات XML الخاص بي وتحويل XSLT الخاص بي يحددان نفسيهما كـ UTF-8 لا UTF-16.

تحديث:يبدو أن UTF-16 يظهر لأنني أستخدم سلسلة (منشئ) كآلية إخراج.عندما أقوم بتغيير الرمز لاستخدام a MemoryStream بدل من StringBuilder, ، تم الحفاظ على ترميز UTF-8 الخاص بي.أظن أن هذا له علاقة بالأعمال الداخلية للـ string النوع وكيف يتعامل مع الترميز.

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

المحلول

تحتاج إلى استخدام XmlWriterSettings هدف.قم بتعيين خصائصه لحذف إعلان XML، وتمريره إلى المُنشئ الخاص بك XmlWriter.

StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;

using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
  XslCompiledTransform transform = new XslCompiledTransform();
  transform.Load("stylesheet.xslt");
  transform.Transform(data, transformedData);
  Response.Write(output.ToString());
}

نصائح أخرى

أسهل طريقة هي إضافة هذه العقدة إلى XSLT الخاص بك:

<xsl:output 
    method="html" 
    omit-xml-declaration="yes"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top