سؤال

وهدفي هو بناء المحرك الذي يأخذ أحدث HL7 3.0 الوثائق CDA وجعلها متخلفة متوافقة مع HL7 2.5 وهو حشا مختلفا بشكل جذري.

والوثيقة CDA هو ملف XML الذي عندما يقترن مع ملف XSL مطابقة لها يجعل نوبة وثيقة HTML للعرض إلى المستخدم النهائي.

في HL7 2.5 أحتاج للحصول على نص المقدمة، خالية من أي علامات، وأضعاف ذلك في تيار النص (أو ما شابه) أن أستطيع أن أكتب في 80 حرف خطوط لتجميع رسالة HL7 2.5.

وحتى الآن، وأنا اتخاذ نهج استخدام XslCompiledTransform لتحويل وثيقة XML الخاص بي باستخدام XSLT والمنتج وثيقة HTML الناتجة.

وبلادي الخطوة التالية هي أن تأخذ تلك الوثيقة (أو ربما في الخطوة قبل ذلك) وتجعل من HTML كنص. لقد بحثت لفترة من الوقت، ولكن لا يمكن معرفة كيفية تحقيق ذلك. أنا على أمل شيئا من السهل أن أنا فقط تطل، أو مجرد لا يمكن العثور على مصطلحات البحث السحرية. يمكن لأي شخص أن يقدم بعض المساعدة؟

وFWIW، لقد قرأت أسئلة أخرى 5 أو 10 في SO التي تبني أو توجيه اللوم باستخدام التعابير المنطقية لهذا، ولا أعتقد أنني أريد أن تسلك هذا الطريق. أنا في حاجة إلى نص المقدمة.

using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;

public class TransformXML
{

    public static void Main(string[] args)
    {
        try
        {

            string sourceDoc = "C:\\CDA_Doc.xml";
            string resultDoc = "C:\\Result.html";
            string xsltDoc = "C:\\CDA.xsl";

            XPathDocument myXPathDocument = new XPathDocument(sourceDoc);
            XslCompiledTransform myXslTransform = new XslCompiledTransform();

            XmlTextWriter writer = new XmlTextWriter(resultDoc, null);
            myXslTransform.Load(xsltDoc);

            myXslTransform.Transform(myXPathDocument, null, writer);

            writer.Close();

            StreamReader stream = new StreamReader (resultDoc);

        }

        catch (Exception e)
        {
            Console.WriteLine ("Exception: {0}", e.ToString());
        }
    }
}
هل كانت مفيدة؟

المحلول

ومنذ لديك مصدر XML، والنظر في كتابة XSL من شأنها أن تعطيك إخراج تريد دون الخطوة HTML المتوسطة. وسيكون أكثر موثوقية من محاولة لتحويل HTML.

نصائح أخرى

وهذا سوف أترك لكم فقط مع النص:

class Program
{
    static void Main(string[] args)
    {
        var blah =  new System.IO.StringReader(sourceDoc);
        var reader = System.Xml.XmlReader.Create(blah);
        StringBuilder result = new StringBuilder();

        while (reader.Read())
        {
            result.Append( reader.Value);
        }
        Console.WriteLine(result);
    }

    static string sourceDoc = "<html><body><p>this is a paragraph</p><p>another paragraph</p></body></html>";
}

وأو يمكنك استخدام تعبير عادي:

public static string StripHtml(String htmlText)
{
    // replace all tags with spaces...
   htmlText = Regex.Replace(htmlText, @"<(.|\n)*?>", " ");

   // .. then eliminate all double spaces
   while (htmlText.Contains("  "))
   {
       htmlText = htmlText.Replace("  ", " ");
    }

   // clear out non-breaking spaces and & character code
   htmlText = htmlText.Replace("&nbsp;", " ");
   htmlText = htmlText.Replace("&amp;", "&");

   return htmlText;
}

ويمكن استخدام شيء من هذا القبيل هذا الذي يستخدم الوشق وبيرل لتقديم أتش تي أم أل ومن ثم تحويل ذلك إلى نص عادي؟

وهذا هو عظيم حالة الاستخدام لXSL: FO وFOP. FOP ليس فقط لإخراج PDF، واحدة من المخرجات الرئيسية الأخرى التي معتمد النص. يجب أن تكون قادرة على بناء XSLT بسيطة + FO الأنماط التي تحتوي على مواصفات (أي خط العرض) الذي تريده.

وهذا الحل سوف أكثر قليلا من الوزن الثقيل أن مجرد استخدام xml-> xslt-> النص كما اقترح ScottSEA، ولكن إذا كان لديك متطلبات التنسيق أي أكثر تعقيدا (مثل حك)، وسوف تصبح أسهل بكثير للتعبير في FO ، من السخرية حتى في XSLT.

وأود أن تجنب regexs لاستخراج النص. هذا أيضا على مستوى منخفض وضمان أن تكون هشة. إذا كنت ترغب فقط في النص و80 شخصية خطوط، فإن قالب XSLT الافتراضي طباعة النص عنصر فقط. وبمجرد الانتهاء من النص فقط، يمكنك تطبيق أيا كان تجهيز النصوص هو ضروري.

وبالمناسبة، أنا أعمل لحساب شركة التي تنتج جمعيات تنمية المجتمع كجزء من منتجاتنا (التعرف على الصوت لdications). وأود أن ننظر إلى XSLT التي تحول 3.0 إلى 2.5 مباشرة. اعتمادا على الإخلاص كنت تريد أن تبقي بين الروايتين، فإن الطريق XSLT الكامل ربما يكون أسهل رهان إذا ما كنت تريد حقا أن تحقيقه هو التحويل بين الصيغ. وهذا ما تم بناؤه XSLT القيام به.

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