XSLT-преобразование с добавлением нежелательного перевода строки - PullRequest
2 голосов
/ 02 сентября 2011

Используя Vs 2010, я редактирую файл xsl, который будет использоваться для преобразования в файл xml.Я пытаюсь вывести возврат каретки () и это только.Я не хочу, чтобы символ перевода строки (x0A) появлялся.

Независимо от того, какой тип трюка я делаю в xsl, выходной файл всегда добавляет LF к моему CR (CRLF), и я этого не делаюхочу это.Причина, по которой я хочу только CR, заключается в том, что выходные данные анализируются вторичной системой, которая отправляет sms-сообщения, для чего требуется только LF.

Мне интересно, проблема в xsl или преобразованииprocess.

Таблица стилей:

<xsl:stylesheet xmlns:l="http://schemas.something.no/2008/" version='1.0'>
 <xsl:import href='LydiaDateFuncs.xsl'/>
 <xsl:template match='/'>
   <xsl:apply-imports/>
 </xsl:template>
 <xsl:output method="xml" encoding="utf-8" indent="no" />

 <xsl:template match="l:WorkOrderOccurrenceBE">
   <Message>
     <Body>
       Adding cr here<xsl:text>&#xD;</xsl:text><xsl:text>&#xD;</xsl:text>No dice.
     </Body>
   </Message>
 </xsl:template>

Код для преобразования:

public static XmlDocument TransformObject(string xslFilepath, object serObj) 
{
XmlDocument result = null;
xslTransf.Load(xslFilepath, new XsltSettings { EnableScript = true }, newXmlUrlResolver());
result = TransformObject(xslTransf, serObj);
}

public static XmlDocument TransformObject(XslCompiledTransform xslTransform, object transformObject)
{
    XmlDocument result = null;
    if (xslTransform != null)
    {
        DataContractSerializer serializer = new DataContractSerializer(transformObject.GetType());

        string serializedObjValue = null;
        using (MemoryStream stream = new MemoryStream())
        {
            serializer.WriteObject(stream, transformObject);
            serializedObjValue = (new UTF8Encoding()).GetString(stream.ToArray());
        }

        if (serializedObjValue != null)
        {
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(serializedObjValue);

            XmlDeclaration xmldec = xmldoc.CreateXmlDeclaration("1.0", "utf-8", null);
            xmldoc.InsertBefore(xmldec, xmldoc.DocumentElement);

            using (Stream stream = new MemoryStream())
            {
                xslTransform.Transform(xmldoc, null, stream);
                stream.Position = 0;
                using (StreamReader sr = new StreamReader(stream, Encoding.Unicode))
                {
                    string xmlRes = sr.ReadToEnd();
                    result = new XmlDocument();
                    result.LoadXml(xmlRes);
                }
            } 
        }  
    }
    return result;
}

Кто-нибудь сталкивался с подобной проблемой?

1 Ответ

0 голосов
/ 02 сентября 2011

Одним из способов решения этой проблемы является использование XmlTextWriter при соответствующей перегрузке XslCompiledTransform.Transform()

. Для этого экземпляра XmlTextWriter должно быть установлено свойство Settings с экземпляром * 1007.* для которого вы указали любые символы новой строки, которые вы хотите использовать в качестве значения свойства XmlWriterSettings.NewLineChars.

См .: http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.settings.aspx

и

http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.newlinechars.aspx

...