나는이 오류에 대한 해결책을 찾기 위해 하루를 보냈지 만 다른 주제가 실제로 해결되지는 않았지만 동일한 문제를 해결하는 데 거의 사용되지 않았습니다. 따라서 중복 된 질문이 있으면 미리 사과드립니다.Java에서 Apache FOP의 XSL 오류
우리는 사용자가 이미지를 저장하고 백 엔드 데이터 저장소에서 이미지를 검색 할 수있는 응용 프로그램을 보유하고 있습니다. 또한 이미지에 메타 데이터 (주석이라고 함)를 포함 할 수 있습니다. TIFF 이미지의 경우 사용자가 이미지를 검색 할 때 XML (XML)로 주석을 검색합니다. Apache FOP를 사용하여 텍스트를 테이블로 형식화 한 다음 PNG 파일로 렌더링하고 TIFF로 표시합니다.
최근까지 작동했습니다.
SXCH0003 : org.apache.fop.fo.ValidationException : "구경에게 : 테이블 몸"나는 PNG 파일로 XML을 변환하기 위해 전화를 걸 때 이제 다음과 같은 오류를보고있다 이없는 자식 요소. 필수 내용 모델 : 마커 < XSL 파일 : 라인 # > "fo : table-body"에 하위 요소가 없습니다. 필수 컨텐츠 모델 : 마커 * (테이블 행 + | 테이블 셀 +)는 소스 내에 속성/우선이 빈 요소로 인한 데이터의 문제라고 생각에
(위치 < 라인 # > 참조) XML. 자리 표시 자 값을 누락 된 위치의 XML에 강제로 추가하는 코드를 추가했습니다. 그게 문제를 해결하지 못했을 때, 내가 쓰지 않은 XSL이 문제의 근원 일 가능성이 높습니다.
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myns="http://xmlapp.fm.net/ns/app/service">
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="main">
<fo:region-body margin-top="1cm" margin-bottom="1cm" />
<fo:region-before extent="0.5cm" />
<fo:region-after region-name="xsl-region-after" display-align="before" extent="2.0cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="main">
<fo:static-content flow-name="xsl-region-before">
<fo:block>Page title text</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-after" >
<fo:block-container left="500pt" top="28pt" width="220mm" position="absolute">
<fo:block font-size="16"><xsl:value-of select="//myns:cust" /> : <xsl:value-of select="//myns:docId" /></fo:block>
</fo:block-container>
</fo:static-content>
<fo:flow flow-name="xsl-region-body" >
<xsl:call-template name="annotationsTable" />
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template name="annotationsTable">
<fo:table table-layout="fixed">
<fo:table-header>
<fo:table-row>
<fo:table-cell><fo:block> Annotation </fo:block></fo:table-cell>
<fo:table-cell><fo:block> UserName </fo:block></fo:table-cell>
<fo:table-cell><fo:block> UserID </fo:block></fo:table-cell>
<fo:table-cell><fo:block> Date </fo:block></fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<xsl:apply-templates select="//myns:annotation" />
</fo:table-body>
</fo:table>
</xsl:template>
<xsl:template match="myns:annotation">
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:value-of select="./myns:text" />
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="./@createdByName"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="./@createdByUserID" />
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="./@systemDate" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
</xsl:stylesheet>
우리가 변환하려는 XML의 형식은 다음과 같습니다
<annotation createdByName="Frank" createdByUserID="X1234" systemDate="2014-04-14">
<text>this is the text of an annotation</text>
</annotation>
내가 뭔가를 잘못하고 있어요 것을 알고있다. 문제는 무엇을 알기 위해 XSL에 대해 충분히 알지 못한다는 것입니다. 누군가 조언 할 수 있습니까?
감사합니다.
나는 이것을했고 효과가 있었다. 감사! –