2009-10-30 2 views
0

xml을 한 형식에서 다른 형식으로 변환하는 .xslt가 있습니다 (사용하지 않고 xsd이므로 한 스키마에서 다른 것으로 말할 필요가 없습니다). 내 문제는 번역에서 원래 파일의 인코딩 '이 손실된다는 것입니다. 내 데이터베이스에서 이름이 작은 따옴표가 아닌 아포스트로피 문자를 사용하여 저장되기 때문에이 문제가 발생합니다.이 새 데이터로 업데이트를 수행 할 때 이름에 데이터베이스에 아포스트로피가 있기 때문에 이름이 일치하지 않습니다. 번역 된 xml 파일을 읽는 Java 업데이트 코드에는 작은 따옴표가 있습니다.'의 문제점이 'xlst로 처리 할 때

원본 파일이 (이름 요소의 음표 값)과 같이 카드 요소의 다양한 목록이 있습니다

<card> 
     <cost>4BB</cost> 
     <color>Black</color> 
     <expansion-set> 
      <rarity>R</rarity> 
      <abbreviation>UD</abbreviation> 
     </expansion-set> 
     <type>Enchantment</type> 
     <ruling>Vintage tournaments (see Rule 901) have restricted this 
      card since 1999/10/01.</ruling> 
     <ruling>Legacy tournaments (see Rule 902) have banned this card 
      since 1999/10/01.</ruling> 
     <ruling>Extended tournaments (see Rule 903) have banned this 
      card since 1999/08/01.</ruling> 
     <note>Note - Also see Skip, Rule G19.11.</note> 
     <text>Text(UD): Skip your draw step. ; Pay 1 life: Draw a card.</text> 
     <name>Yawgmoth&apos;s Bargain</name> 
    </card> 

XSLT 템플릿 카드 요소를 일치 내가 찾고 있어요 새로운 양식을 만들 것을이 : 당신은 내가 원하는 부분 만 모든 것을 통해 전송하고 있지 않다 내가 속성에 이름 요소를 돌리겠다 볼 수 있듯이

<xsl:template match="card"> 
     <card name="{name}"> 
      <!-- Add the card name --> 
<!--   <xsl:attribute name="name"> 
       <xsl:value-of select="name"/> 
      </xsl:attribute> 
      <cardname><xsl:value-of select="name"/></cardname> --> 
      <!-- Add the card's rulings --> 
      <xsl:apply-templates select="ruling"/> 
      <!-- Add the card's notes --> 
      <xsl:apply-templates select="note"/> 
     </card> 
    </xsl:template> 

(나는 요소로 이름을 유지하려했지만 같은 문제를 볼 수있다) . 주석 처리 된 부분은 내가 원하는 출력 (현재 변환 및 모든 결과를 작은 따옴표를 아포스트로피가 아닌 동일한 용도로 주석 처리 한 것)를 얻으려고 시도한 다른 시도입니다. 여기

가 (이름 속성의 다른 값을 유의) 카드 요소가 번역 출력의 모습입니다 : 이제 (자바로 작성된) 내 데이터베이스 업데이트 코드가 XML에 읽을 때

<card name="Yawgmoth's Bargain"> 
<ruling ruleref="901">Vintage tournaments (see Rule 901) have restricted this card since 1999/10/01.</ruling> 
<ruling ruleref="902">Legacy tournaments (see Rule 902) have banned this card since 1999/10/01.</ruling> 
<ruling ruleref="903">Extended tournaments (see Rule 903) have banned this card since 1999/08/01.</ruling> 
<note ruleref="G19.11">Note - Also see Skip, Rule G19.11.</note> 
</card> 

, Yawgmoth의 Bargain에는 문자열에 작은 따옴표 문자가 있지만 내가 만든 데이터베이스에는 아포스트로피 문자를 사용하는 이름이 있습니다. 말할 필요도없이 내 업데이트 코드가 카드 이름과 일치하지 않습니다.

xsl 변환에서 이러한 충실도가 저하되는 이유는 무엇입니까?

감사, XML에

이안

답변

2

&apos; 사용하면 출력이 무엇인지되는 ' 인 유니 코드 문자 번호 39 (16 진수 27)입니다 '에 대해 사전 정의 된 엔티티 참조, 아포스트로피를 사용합니다.

문제는 xslt 프로세서와 관련이 없습니다.

작은 따옴표 중 하나를 얻고 있다고 가정합니다. 오른쪽 따옴표 (16 진수 2019)입니다. 어떤 경우에는 (데이터베이스 계층?) 아포스트로피 문자를 '스마트 화'합니다.

+0

그래, 맞아. 이 경우 "다른 것"은 내 자신의 코드였습니다. 이 프로젝트에서 SQL 용 문자열을 이스케이프하기 위해 일부 유틸리티 클래스를 재사용했습니다. 이 코드에는 작은 따옴표를 올바른 작은 따옴표로 "스마트 화"하는 옵션이 있습니다. 재사용이 적절 함 ;-) 실제로 진행되고있는 작업을 알았으므로 이제는 똑같은 스마트 카드 작업을 수행하기 위해 업데이트 코드를 조정하고 모두 잘 수행 할 것입니다. –

관련 문제