2013-08-29 3 views
1

xml에서 일반 텍스트를 가져오고 싶습니다. 어느 한 필드에 html data.i가 들어 있지 않으면 template.pls에 조건을 넣으십시오. 이 > 태그 다음에 모든 것을 반환 xslt를 사용하여 xml에서 html 태그를 제거하십시오.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes" encoding="utf-8"/> 
<xsl:strip-space elements="*"/> 
<xsl:template match="/"> 
<workdetail> 
<xsl:apply-templates select="*" /> 
</workdetail> 
</xsl:template> 
<xsl:template match="*:workdetail"> 
<xsl:variable name="text" select="*:field[starts-with(@name,'summaryText1')]"/> 
     <xsl:choose> 

    <xsl:when test="contains($text, '&lt;')"> 

     <xsl:value-of select="substring-after($text, '&lt;')"/> 



       <xsl:variable name="text" select="substring-after($text, '&gt;')"/> 
    </xsl:when> 

    <xsl:otherwise> 

     <xsl:value-of select="$text"/> 

    </xsl:otherwise> 

</xsl:choose> 
</xsl:stylesheet> 

<?xml version="1.0" encoding="UTF-8"?> 
<workdetail> 
<field name="summaryText1">&lt;UL style="MARGIN-TOP: 0in" type=disc&gt; 
&lt;LI style="TEXT-ALIGN: justify;MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="mso-fareast-font-family: 'timesnewroman'; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-style: italic"&gt;&lt;FONT size=2&gt;Manage the daily activities of the HOD s office.&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt; 
&lt;LI style="MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="mso-fareast-font-family: 'timesnewroman'; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-style: italic"&gt;&lt;FONT size=2&gt;Handle and manage all communication, correspondence and filing of documents. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt; 
&lt;LI style="MARGIN-BOTTOM: 0pt" class=MsoNormal&gt;&lt;SPAN style="mso-fareast-font-family: 'timesnewroman'; mso-bidi-font-family: calibri; mso-bidi-theme-font: minor-latin; mso-bidi-font-style: italic"&gt;&lt;FONT size=2&gt;Fix appointments, arrange for meetings, conferences etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt; 
</workdetail> 

뮤 XSL 파일입니다. 이 텍스트 파일 만 반환 할 더 많은 가치를 전달할 수 있습니다.

+0

게시 한 XML 입력 샘플에 대한 출력을 게시하는 것을 고려하십시오. 그리고 Saxon 9.5의 일부 버전은 구문 분석 작업을 수행 할 수있는 http://www.saxonica.com/documentation/index.html#!functions/saxon/parse-html을 사용하는 XSLT 2.0 프로세서를 알려주십시오. HTML은 쉽다. –

+0

답장 martin에 대한 reply.i xslt2.0 프로세서 및 saxon9pe.jar 변환을 사용하고 있습니다. 예상 출력은 HOD 사무실의 일상 활동 관리, 문서의 모든 통신, 서신 및 파일 처리 및 관리. 약속을 수정하고, 회의, 회의 등을 주선합니다. 그냥 모든 HTML 태그를 제거하고 싶습니다. – user1906222

답변

3

색슨 9.5 PE 사용하면 http://www.saxonica.com/documentation/index.html#!functions/saxon/parse-html을 사용할 수 있어야합니다 : 당신이

<xsl:stylesheet xmlns:saxon="http://saxon.sf.net/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">...</xsl:stylesheet> 

는 스타일 시트의 루트 요소에 선언 한

<xsl:template match="workdetail/field[@name = 'summaryText1']"> 
    <xsl:value-of select="saxon:parse-html(.)"/> 
</xsl:template> 

.

HTML 파서에 액세스 할 수없는 경우 replace 및 정규식을 사용하여 마크 업을 제거 할 수는 있지만 접근 방법에 대해서는 다음과 같이 제안합니다. 정규식은 철저하게 테스트되지 않습니다.

<xsl:template match="workdetail/field[@name = 'summaryText1']"> 
    <xsl:value-of select="replace(., '&lt;/?\w+[^&lt;]*&gt;', '')"/> 
</xsl:template> 
+0

안녕하세요 martin 님, reply.one 질문에 감사드립니다. saxon8e 또는 saxonhe 무료 버전으로 동일한 작업을 수행 할 수 있습니다. 그걸 할 수있는 다른 방법. – user1906222

+0

나는 오픈 소스 Saxon 9.5가 그 확장 기능을 지원한다고 생각하지 않는다. 나는 "saxon8e"로 어떤 버전을 참조하는지 모르며, 당신이 그 확장 기능을 지원하는지 여부를 직접 확인해야 할 것입니다. –

+0

답장 again.yaa에 대한 감사 나는 모두 saxon8e 및 saxon9.5he saxon 확장 기능을 사용할 수 없습니다 확인했다. 내가 거기에 모든 HTML 태그를 제거 할 수있는 다른 방법이 있습니다. – user1906222

관련 문제