문제

저의 목표는 최신 HL7 3.0 CDA 문서를 사용하는 엔진을 구축하고 근본적으로 다른 짐승 인 HL7 2.5와 호환되는 엔진을 만드는 것입니다.

CDA 문서는 XML 파일과 일치하는 XSL 파일과 쌍을 이룰 때 HTML 문서를 최종 사용자에게 표시하기에 적합합니다.

HL7 2.5에서는 렌더링 된 텍스트를 가져와 마크 업이없고 텍스트 스트림 (또는 이와 유사한)으로 접어 80 자 줄로 쓸 수 있도록 HL7 2.5 메시지를 채울 수 있습니다.

지금까지 XSLT 및 제품을 결과적으로 HTML 문서로 사용하여 XML 문서를 변환하기 위해 XSLCompileDtransform을 사용하는 방법을 사용하고 있습니다.

다음 단계는 해당 문서를 가져 와서 HTML을 텍스트로 렌더링하는 것입니다. 나는 한동안 검색했지만 이것을 달성하는 방법을 알 수는 없습니다. 나는 단지 간과하고 있거나 마법의 검색어를 찾을 수 없다는 것이 쉬운 일을 바라고 있습니다. 누구든지 도움을 줄 수 있습니까?

fwiw, 나는 이것을 위해 Regex를 사용하여 받아들이거나 훈계하는 5 ~ 10 개의 다른 질문을 읽었으며, 그 길로 가고 싶다고 생각하지 않습니다. 렌더링 된 텍스트가 필요합니다.

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 소스가 있으므로 중간 HTML 단계없이 원하는 출력을 제공하는 XSL을 작성하는 것이 좋습니다. 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;
}

당신은 같은 것을 사용할 수 있습니다 이것 Lynx와 Perl을 사용하여 HTML을 렌더링 한 다음이를 일반 텍스트로 변환하는 것은 무엇입니까?

이것은 XSL : FO 및 FOP에 대한 훌륭한 사용 사례입니다. FOP PDF 출력만을위한 것이 아니라 지원되는 다른 주요 출력 중 하나는 텍스트입니다. 원하는 사양 (예 : 선 너비)이있는 간단한 XSLT + FO 스타일 시트를 구성 할 수 있어야합니다.

이 솔루션은 Scottsea가 제안한대로 XML-> XSLT-> 텍스트를 사용하는 것만으로도 약간의 무거운 가중치입니다. 그러나 더 복잡한 형식 요구 사항 (예 : 계약)이 있으면 조롱하는 것보다 FO로 표현하기가 훨씬 쉬워집니다. XSLT에서.

나는 텍스트를 추출하기 위해 Regex를 피할 것입니다. 그것은 너무 낮은 수준이며 부서지기 쉬워졌습니다. 텍스트와 80 개의 문자 라인을 원한다면 기본 XSLT 템플릿은 요소 텍스트 만 인쇄합니다. 텍스트 만 있으면 필요한 텍스트 처리가 필요한 모든 것을 적용 할 수 있습니다.

또한, 저는 제품의 일부로 CDA를 생산하는 회사 (DICATIONS에 대한 음성 인식)를 위해 일합니다. 3.0을 2.5로 직접 변환하는 XSLT를 살펴 봅니다. 두 버전 사이를 유지하려는 충실도에 따라 전체 XSLT 경로가 실제로 달성하고자하는 것이 형식 간의 변환이라면 가장 쉬운 베팅 일 것입니다. 그것이 XSLT가 만들어진 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top