XRechnung Visualizer 및 Saxon-HE for .NET을 사용한 자체 닫힘 DIV 태그 문제

Kristof

XRechnung을 HTML로 변환하기 위해 itplr-kosit의 xrechnung-visualization 을 사용하여 .NET / C #으로 XRechnung 시각화 도우미를 구현하고 싶습니다 . 프로세서로서 저는 Saxonica의 Saxon-HE를 사용 합니다. 이제 나는 자동 폐쇄 DIV의 형태로 출력으로 잘못된 HTML로 고생하고 있습니다.

변환 코드는 다음과 같습니다.

public static string TransformXml(string xmlData, string xslData)
{
    var xsltProcessor = new Saxon.Api.Processor();

    var documentBuilder = xsltProcessor.NewDocumentBuilder();
    documentBuilder.BaseUri = new Uri("file://");
    var xdmNode = documentBuilder.Build(new StringReader(xmlData));

    var xsltCompiler = xsltProcessor.NewXsltCompiler();
    var xsltExecutable = xsltCompiler.Compile(new StringReader(xslData));
    var xsltTransformer = xsltExecutable.Load();
    xsltTransformer.InitialContextNode = xdmNode;
    
    var results = new Saxon.Api.XdmDestination();
    xsltTransformer.Run(results);

    return results.XdmNode.OuterXml;
}

    

호출 :

var xmlData = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "xrechnung.xml"));
var xslDataToXR = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "cii-xr.xsl"));
var xslDataToHTML = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "xrechnung-html.xsl"));

var xrXMLData = TransformXml(xmlData, xslDataToXR);
var htmlData = TransformXml(xrXMLData, xslDataToHTML);

File.WriteAllText(Path.Combine(Directory.GetCurrentDirectory(), "result.html"), htmlData);

작동 ... 문제까지, 결과 HTML에서 채워지지 않은 모든 필드는 자체 닫는 DIV 태그 로 변환됩니다 .

예를 들어, 다음 스 니펫은 xrechnung-html.xsl...

<div class="boxzeile">
  <div class="boxdaten legende">Postfach:</div>
  <div id="BT-51" title="BT-51" class="boxdaten wert"><xsl:value-of select="xr:BUYER_POSTAL_ADDRESS/xr:Buyer_address_line_2"/></div>
</div>

... xml은에 대한 값을 제공하지 않으므로 다음 HTML로 렌더링됩니다 Buyer_address_line_2.

<div class="boxzeile">
  <div class="boxdaten legende">Postfach:</div>
  <div id="BT-51" title="BT-51" class="boxdaten wert"/>
</div>

브라우저는 자체 닫는 DIV를 열린 태그로 해석하고 전체보기가 손상됩니다.

어떤 아이디어?

Martin Honnen

Saxon이 XdmDestination을 사용하지 않고 Serializer를 사용하여 파일이나 스트림 또는 문자열 작성기에 직접 작성하여 직렬화를 수행하도록한다면 HTML 직렬화 규칙을 준수한다고 확신합니다. XML 및 XSLT의 맥락에서 파일에서 문자열을 읽거나 파일 API를 사용하여 파일에 문자열을 쓰는 대신 XML 파서 및 XSLT 프로세서가 입력 구문 분석 및 출력 직렬화를 가능한 한 많이 처리하도록하는 것이 좋습니다.

두 가지 변환을 연결하려는 것처럼 보이므로

  var xslt1 = xsltExecutable1.Load30();
  var xslt2 = xsltExecutable2.Load30();
  
  using (var inputStream  = File.OpenRead(Path.Combine(Directory.GetCurrentDirectory(), "xrechnung.xml")) {
    using (var resultStream = File.OpenWrite(Path.Combine(Directory.GetCurrentDirectory(), "result.html") {
      xslt1.Transform(inputStream , xslt2.AsDocumentDestination(xslt2.NewSerializer(resultStream)));
    }
  }

실행 가능한 접근 방식입니다.

물론 XSLT 3에서 두 스타일 시트를 직접 변경할 수도 있습니다.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:param name="step1-uri" as="xs:string">https://github.com/itplr-kosit/xrechnung-visualization/raw/master/src/xsl/ubl-invoice-xr.xsl</xsl:param>
  <xsl:param name="step2-uri" as="xs:string">https://github.com/itplr-kosit/xrechnung-visualization/raw/master/src/xsl/xrechnung-html.xsl</xsl:param>

  <xsl:output method="html" indent="yes" html-version="5"/>

  <xsl:template match="/">
      <xsl:sequence
         select="transform(map {
                   'source-node' : .,
                   'stylesheet-location' : $step1-uri
                 })?output ! transform(map { 
                               'source-node' : ., 
                               'stylesheet-location' : $step2-uri 
                             })?output"/>
  </xsl:template>
  
</xsl:stylesheet>

일반적으로 fold-left일련의 스타일 시트를 연결하는 데 사용할 수 있습니다 .

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:param name="step1-uri" as="xs:string">https://github.com/itplr-kosit/xrechnung-visualization/raw/master/src/xsl/ubl-invoice-xr.xsl</xsl:param>
  <xsl:param name="step2-uri" as="xs:string">https://github.com/itplr-kosit/xrechnung-visualization/raw/master/src/xsl/xrechnung-html.xsl</xsl:param>

  <xsl:param name="xslt-locations" as="xs:string*" select="$step1-uri, $step2-uri"/>

  <xsl:output method="html" indent="yes" html-version="5"/>

  <xsl:template match="/">
      <xsl:sequence
         select="fold-left(
                   $xslt-locations,
                   .,
                   function($doc, $xslt-location) { 
                     transform(map { 'source-node' : $doc, 'stylesheet-location' : $xslt-location })?output
                   }
                )"/>
  </xsl:template>
  
</xsl:stylesheet>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자체 닫힘 태그 및 여닫이 태그에 대한 CSS 규칙

분류에서Dev

BeautifulSoup : 태그 사이에 자동 닫힘 태그 생성 및 삽입

분류에서Dev

XML의 자동 닫힘 태그 공간 문제-Cheerio

분류에서Dev

Saxon-HE 9.7 : bash에서 쿼리 문자열을 실행하려고 할 때 "사용 가능한 기본 URI 없음"오류

분류에서Dev

saxon9he와 함께 카탈로그 파일 사용

분류에서Dev

사용자 권한 및 그룹을 사용한 액세스 제어

분류에서Dev

python 및 beautifullsoup을 사용하여 모든 자식과 함께 div 태그를 제거하려면 어떻게해야합니까?

분류에서Dev

Azure Devops-Docker 및 ACR (Azure Container Registry)을 사용한 릴리스 파이프 라인-태그 문제

분류에서Dev

및 연산자를 사용하여 플래그 부울 상태 변경 문제

분류에서Dev

제목 태그에서 텍스트를 추출하여 XSLT를 사용하는 div의 경우 id 소문자 및 공백으로 추가

분류에서Dev

python pandas 및 교체 기능을 사용한 문자열 조작

분류에서Dev

큰 json 문자열에 대한 SQL Azure 연결이 닫힘

분류에서Dev

강력한 태그와 그 내용을 문자열에서 제거

분류에서Dev

로그인 한 사용자 및 동일한 개체에 속한 다른 사용자를 제외하는 방법

분류에서Dev

MySQL을 사용한 고유 열 및 자동 증가의 마이그레이션 문제

분류에서Dev

join 문 및 태그 맵을 사용할 때 두 개 이상의 태그 검색

분류에서Dev

자바 스크립트를 사용하여 태그 제거 (속성 내부 태그 및 중첩 태그 포함)

분류에서Dev

추출시 자동 닫힘 태그 유지

분류에서Dev

Scala에서 비 자동 닫힘 태그 XML 작성

분류에서Dev

AngleSharp로 자동 닫힘 태그를 생성하는 방법

분류에서Dev

닫기 및 열기 div 태그를 HAML과 동일한 줄에 표시

분류에서Dev

<div> 및 <a>를 사용하여 그리드 문제

분류에서Dev

Saxon-HE와 C #을 사용하여 XQuery에서 모든 XPath 찾기

분류에서Dev

asp.net을 사용하여 div 태그 내에서 내부 HTML 및 내부 텍스트 가져 오기

분류에서Dev

XSL 및 자체 닫는 태그로 XML 변환

분류에서Dev

모든 <div> .... </ div> 태그와 그 안의 모든 것을 문자열에서 제거합니다.

분류에서Dev

Saxon-9.7-HE의 SingletonItem 대체

분류에서Dev

$ 및 grep을 사용하는 이상한 문자열 일치 문제

분류에서Dev

태그 사이의 실제 텍스트에서 '<'문자를 제거하지 않고 정규식을 사용하여 문자열에서 HTML 태그 제거

Related 관련 기사

  1. 1

    자체 닫힘 태그 및 여닫이 태그에 대한 CSS 규칙

  2. 2

    BeautifulSoup : 태그 사이에 자동 닫힘 태그 생성 및 삽입

  3. 3

    XML의 자동 닫힘 태그 공간 문제-Cheerio

  4. 4

    Saxon-HE 9.7 : bash에서 쿼리 문자열을 실행하려고 할 때 "사용 가능한 기본 URI 없음"오류

  5. 5

    saxon9he와 함께 카탈로그 파일 사용

  6. 6

    사용자 권한 및 그룹을 사용한 액세스 제어

  7. 7

    python 및 beautifullsoup을 사용하여 모든 자식과 함께 div 태그를 제거하려면 어떻게해야합니까?

  8. 8

    Azure Devops-Docker 및 ACR (Azure Container Registry)을 사용한 릴리스 파이프 라인-태그 문제

  9. 9

    및 연산자를 사용하여 플래그 부울 상태 변경 문제

  10. 10

    제목 태그에서 텍스트를 추출하여 XSLT를 사용하는 div의 경우 id 소문자 및 공백으로 추가

  11. 11

    python pandas 및 교체 기능을 사용한 문자열 조작

  12. 12

    큰 json 문자열에 대한 SQL Azure 연결이 닫힘

  13. 13

    강력한 태그와 그 내용을 문자열에서 제거

  14. 14

    로그인 한 사용자 및 동일한 개체에 속한 다른 사용자를 제외하는 방법

  15. 15

    MySQL을 사용한 고유 열 및 자동 증가의 마이그레이션 문제

  16. 16

    join 문 및 태그 맵을 사용할 때 두 개 이상의 태그 검색

  17. 17

    자바 스크립트를 사용하여 태그 제거 (속성 내부 태그 및 중첩 태그 포함)

  18. 18

    추출시 자동 닫힘 태그 유지

  19. 19

    Scala에서 비 자동 닫힘 태그 XML 작성

  20. 20

    AngleSharp로 자동 닫힘 태그를 생성하는 방법

  21. 21

    닫기 및 열기 div 태그를 HAML과 동일한 줄에 표시

  22. 22

    <div> 및 <a>를 사용하여 그리드 문제

  23. 23

    Saxon-HE와 C #을 사용하여 XQuery에서 모든 XPath 찾기

  24. 24

    asp.net을 사용하여 div 태그 내에서 내부 HTML 및 내부 텍스트 가져 오기

  25. 25

    XSL 및 자체 닫는 태그로 XML 변환

  26. 26

    모든 <div> .... </ div> 태그와 그 안의 모든 것을 문자열에서 제거합니다.

  27. 27

    Saxon-9.7-HE의 SingletonItem 대체

  28. 28

    $ 및 grep을 사용하는 이상한 문자열 일치 문제

  29. 29

    태그 사이의 실제 텍스트에서 '<'문자를 제거하지 않고 정규식을 사용하여 문자열에서 HTML 태그 제거

뜨겁다태그

보관