2017-02-03 11 views
0

idml 파일을 내 프로젝트의 XML로 변환하려고합니다. 추가 xml 선언에 문제가 있습니다. `XSLT에서 xml에서 extra xml 선언을 제거하는 방법은 무엇입니까?

<Content> &lt;?xml version="1.0" encoding="UTF-16" 
    standalone="yes"?&gt;&#x2028;&lt;math&gt; 
    &lt;/math&gt;</Content> 

` 이 내가 변환 후 무엇입니까 출력은 다음과 같습니다 : 여기 은 IDML 파일의 일부이다

내 작업이 다음> <와 &lt;&gt;을 대체하는 것입니다
<?xml version="1.0" encoding="UTF-8"?> 
<content> 
    <?xml version="1.0" encoding="UTF-16" standalone="yes"?> 
    <math></math> 
</content> 

이 문제가있어 ...

나는 이것을 (표준적인 것이 아닌) 많은 방법을 시도했다. 마지막으로 xml을 공백으로 대체하고이를 PI로 바꾸고 PI를 변환한다. 처리를 게시 mode..but 그것은 또한 내가 생성 할

<xsl:template match="Content"> 
    <xsl:if test=".[contains(text(),'math')]"> 
     <xsl:value-of select="replace(./text(),'xml','')”/> 
    </xsl:if> 
</xsl:template> 

출력 성공하지 않은 :

<?xml version="1.0" encoding="UTF-8"?> <content><math></math></content> 

그리고 내 개발을위한 색슨 9.7.0HE을 사용하고 있습니다.

이 문제를 해결하는 데 도움주세요 .. 감사합니다 ..!

+0

정확히 어떤 XSLT 2.0 프로세서를 사용합니까? 게시 한 입력에 대해 생성하려는 출력은 무엇입니까? 다음과 같이 마틴 @ –

+0

내가 출력을 생성 할 내가 내 개발에 색슨 (9)를 사용하고 있습니다 .. – user2490093

+0

문제를 수정하십시오 및 코드 스 니펫으로 원하는 출력을 표시하십시오. Saxon 9 버전은 정확히 어떤 버전입니까? Saxon 9.7은'parse-xml'을 지원합니다. 예전의 상업용 릴리스는 비슷한 확장 기능을 지원합니다. 즉,'Content' 요소의 내용을 XML로 구문 분석하고 노드를 출력하면 여러분은 중첩 된 방식으로 XML 선언을 이스케이프 처리했습니다. –

답변

0

version="3.0" 스타일, 당신은 그 내용으로 이스케이프의 루트 요소 전에 &#x2028; 문자를 주어, 잘 형성되지 않고, 작동하지 않는 경우, 귀하의 의견 조각으로 그러나

<xsl:template match="Content"> 
    <content> 
     <xsl:copy-of select="parse-xml(normalize-space())"/> 
    </content> 
</xsl:template> 

를 사용할 수 있습니다 마크 업. XML 문서 나 XML 조각이 아닌 경우 어떤 종류의 콘텐츠가 있는지 분명하지 않으므로 parse-xml이나 parse-xml-fragment도 도움이되지 않습니다.

+0

xslt 3.0을 여기 버전으로 사용 했습니까? xslt 2.0을 사용 중입니다. & # x2028; 코드에서 처리되지만 더 많은 노드가 복잡해지면서 제거되었습니다. 올바른 입력이 idml이고 XML (둘 다 xml 형식)이 출력됩니다. – user2490093

+0

Saxon 9.7에서 'parse-xml'을 사용하여 요소 데이터 내부의 XML을 구문 분석하는 유일한 방법은'version = "을 설정하는 것입니다. 3.0 "이므로 해당 방법을 사용하려면 버전을 변경해야합니다. –