2010-05-25 5 views
2

에서 (노드 이름을 포함) 모든 텍스트를 선택하려면? 감사.나는 현재이 같은 XML 파일이 노드

+0

xslt를 사용해야합니까? 어때 xml 파서 + xpath? –

+0

제목 줄에 "[xslt]"와 같은 태그를 넣지 마십시오. 그것이 바로 태그가있는 것입니다. –

+0

좋은 질문 (+1). 설명과 완벽하지만 짧고 쉬운 해결책에 대한 내 대답을보십시오. :) –

답변

2

XSLT에서 요소를 복사하려고한다고 말해야합니다. 추가 규칙으로이를 수행 할 수 있습니다. apply-templates 요소에 사용자 정의 select 절을 사용하여 모든 노드 유형의 객체뿐만 아니라 속성을 선택한다는 점에 유의하십시오. 또한 aaa에 대한 규칙이 우선하며, 은 아니며은 aaa 요소 자체를 출력에 복사합니다. <b>I am a <i>boy</i></b> :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="aaa"> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
2
<aaa> 
    <b>I am a <i>boy</i></b>. 
</aaa> 

어떻게 같은 정확한 문자열을 얻을 수 있습니다.? "모든 선택 :이 의미

/*/node()

:

귀하의 경우이 작업을 수행하는 가장 쉬운/가장 짧은 방법은 출력에 다음 XPath 식의 결과입니다 최상위 요소의 자식 노드는입니다. "

물론 우리가 선택하지 않으려는 일부 공백 문자 노드가 있지만 XSLT가이를 처리 할 수 ​​있으므로 XPath 표현식은 위에 표시된 것처럼 간단합니다. 이 변환이 제공된 XML 문서에 적용되는

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/*/node()"/> 
</xsl:template> 
</xsl:stylesheet> 

, 원하는 결과가을 생산 :

이제

, XSLT 변환과 결과를 얻으려면, 우리는 다음 사용

<b>I am a <i>boy</i></b>. 

주의 마십시오

,
  1. <xsl:copy-of> XSLT 명령의 사용 (되지 <xsl:value-of>) 사본 노드 아닌 문자열 값.

  2. XML 문서의 공백 문자 만있는 텍스트 노드를 무시하도록 XSLT 프로세서에 지시하는 XSLT 명령을 사용합니다.

+0

표시 할 내용 : XSLT는 XPath에서 수행 할 수있는 모든 작업을 수행 할 수 있습니다. :-)이 접근법을 사용하면 재귀 적으로 조정할 수 없다는 것에 유의하십시오. –

+0

"."이 없습니다.xpath는 잘 못된 출력으로 직렬화 될'' -formed하지만 요청한 문자열입니다. –

+0

@ Mads-Hansen : 고마워, 나는 "." - 질문에서 문장을 끝내는 구두점이라고 생각했습니다. 그에 따라 내 대답이 업데이트되었습니다. –