2010-04-14 3 views
2

저는 AJAX를 통해 가져온 스타일 시트를 사용하여 문서 DOM의 클라이언트 측 XSLT 변환을 트리거하는 버튼이있는 Firefox 용 웹 응용 프로그램을 개발 중입니다.XSLT에서 XPath로 입력 요소의 값에 액세스하기

여기서 변환 될 예정 년대 XHTML의 일부이다 : 스타일 시트 내부

<html> 
<head> 
    <title>Static Javascript-based XMR Form Creator</title> 
</head> 
<body> 
    <h1 id="title">Static Javascript-based XMR Form Creator</h1> 

    <div class="opt_block" id="main_opts"> 
     Form name <input type="text" id="form_name" /> 
     Form cols <input type="text" id="form_cols" size="3" maxlength="3" /> 
    </div> 
    <button id="generate">Generate source</button> 
    <textarea rows="20" cols="50" id="xmr_source" ></textarea> 
</body> 

, I는 상기 제 1 입력 필드 value 속성 ID form_name으로 한 접근하려면.

XSLT는 다음과 같습니다

<xsl:template match="/html/body/div[@id = 'main_opts']" > 
    <form> 
     <xsl:attribute name="fname"> 
      <xsl:value-of select="input[@id = 'form_name']/@value" /> 
     </xsl:attribute> 
    </form> 
</xsl:template> 

나는 그렇게처럼 현재 document에 XSLT를 적용

var processor = new XSLTProcessor(); 
processor.importStylesheet(data); // data received via AJAX request 
// document is obviously the object representing the current DOM 
var result = processor.transformToDocument(document); 

문제는 그 일을해야 XPath를 :

반환 값 없음, wher eas는 Firebug를 통해 DOM을 검사하면 input 요소의 value 속성에 값이 있음을 보여줍니다.

아무도 도와 줄 수 있습니까?

편집 : 명확한 만든 XSLT 슬래시 또는 점 점으로 입력을 참조 시도 슬래시

+0

양식 값을 수동으로 추가한다는 의미입니까 (표시되는 입력 값에 수동으로 값이 없으므로)? – Tomalak

+0

hackish처럼 보이지만 양식 요소가 없습니다. 나는 실제로 폼을 보내지 않고서 그들이하는 일에 대해서만'input'과'textarea' 요소를 사용합니다. – asymmetric

+0

"type"속성의 값을 가져 오려고하면 어떻게 작동합니까? (XSLT가 표준 HTML 네임 스페이스를 사용하지 않아 네임 스페이스가 이상하게 보일 수있는 가능성을 없애고 싶지만 유효한 XHTML로 보이지 않는 HTML은 얻을 수 있음) 하나의 어딘가에.) –

답변

1

현재 문서에 적용되는

<xsl:value-of select="/input[@id = 'form_name']/@value" /> 
<xsl:value-of select="../input[@id = 'form_name']/@value" /> 
+0

죄송합니다. 그러나 문제가되지 않습니다. – asymmetric

1

한 가지 분명한 문제 :

<xsl:value-of select="input[@id = 'form_name']/@value" /> 

이 값은 @value attr의 값을 출력해야합니다. 현재 노드의 하위 노드 인 input의 자식 노드.

Form name <input type="text" id="form_name" /> 

input 요소가 가지고있는 유일한 두 가지 속성이 type이다 : 그러나

, 제공된 XML 문서에서 템플릿 일치 요소의 input 아이는 @value 속성이 없습니다 및 id.

솔루션 : 입력 요소에 value 특성을 추가하고 (XSLT 코드의 다른 모든 요소가 제대로 작동하는 경우)이 특성 값을 출력해야합니다.예를 들어, 사용를 들어

는 :

Form name <input type="text" id="form_name" value="XXXXX" /> 
+0

하지만 input 요소의 value 속성은 * 초기 값을 지정합니다. OTOH, 나는 현재의 것을 얻고 싶다. Javascript에서'@ value' 대신에 전체'input' 엘리먼트에 대해 DOM을 쿼리하고 value 속성을 얻으면 모든 것이 작동합니다. 즉, 엘리먼트의 DOM 표현은 현재 값을 유지합니다 value 속성의 값. 그렇다면 왜 순수한 XPath에서 작동하지 않습니까? – asymmetric

+0

또한 내가 말한대로하면, 현재 입력 요소 대신에'input' 요소의 초기 값을 얻습니다. – asymmetric

+0

@asymmetric : XPath는 브라우저가 HTML DOM을 처리하는 방법을 알지 못합니다. * 현재 * XML 문서 (DOM)가 XPath 엔진에 제공되지 않으면 XPath 표현식을 평가하여 원하는 것을 달성 할 수 없습니다. –

1

이 해킹이다,하지만 난 그것을 사용하고는

모든 입력 요소에

onBlur="this.setAttribute('value', this.value);" 

추가 작동합니다.

원하는 이벤트를 사용할 수 있지만 onBlur는 좋지 않습니다. 클라이언트 측 오버 헤드가 너무 많이 발생하지 않기 때문입니다.

관련 문제