2009-10-31 3 views
2

는 XSLT와 XPath를 1.0를 사용하여 & 앰퍼샌드, 나는 예를 들어, 나는 URL에 사용하기 위해 탈출을 원하는 문자열이 있습니다URL 및

<description>one word &amp; another</description> 

그래서, 텍스트() 설명 요소의 가야 URL이 이스케이프되었습니다.

어떻게하면됩니까?

string a = Server.UrlEncode("one word & another"); 

그리고 생산과 같습니다 :

사용하여 C#을 (XslCompiledTransform) 코드가 될 것이다

one+word+%26+another 

어떤 제안?

+1

조정 코드가 잘못된 가정입니다. XML에 &이 있고 XML 판독기로 구문 분석하면 메모리에있는 문자열에 &이 표시되지 않습니다. XML 구문 분석기는이를 자동으로 이스케이프 처리되지 않은 버전으로 변환합니다. 따라서 UrlEncode 스 니펫의 문자열이 regex 또는 무언가 (결코 수행해서는 안됨)를 사용하여 XML에서 추출되지 않는 한, 해당되지 않습니다. – Jherico

+0

네, 맞습니다. XSLT에서 그 결과를 얻으려면 어떻게해야할까요? –

답변

4

이 작업을 수행하는 내장 아무것도하지만, 바퀴를 재발견하기보다는 스타일 시트가 이미 있습니다 이 예 :

http://skew.org/xml/stylesheets/url-encode/

변환은하지만 (희망) 다른 사람이 당신을위한 디버깅 할 것이다 간단합니다 ...

+0

그래서 짧은 텍스트를 링크로 쉽게 변환 할 수있는 방법이 없습니다. –

+0

XSLT를 단독으로 사용하지 않습니다. 이는 일반적인 변환 언어이므로 실제로는 놀라운 것이 아닙니다. 예를 들어 xpath를 사용하여 XmlDocument에서 노드를 선택한 다음 Server.UrlEncode를 사용하여 소스 XML (codeproject.com/KB/cpp/myXPath.aspx)을 조작 할 수있는 등 다른 기술을 혼합하여 작업을 단순화 할 수 있습니다. XSLT를 통해 결과를 푸시합니다. 상황에 따라 다릅니다. – FinnNk

+0

감사합니다. 그 스타일 시트는 엄청난 도움이되었습니다. –

2

는 XML (따라서 XSL)에서는

&amp; 
&lt; 
&gt; 
+1

+1, 일반적으로'>'를 이스케이프 할 필요는 없습니다. http://www.w3.org/TR/2008/REC-xml-20081126/#syntax – Tim

+0

사실이 경우 사람들의 인식을 떨어 뜨립니다. '>'가 규칙의 예외는 아니라는 것을 기억하는 것이 더 간단합니다. – Tomalak

2

<description>one word & another</description>가 XML을 닮은 조각을 사용하여 &>와 <을 탈출해야하지만 벌거 벗은 앰퍼샌드는 불법입니다. XSL은 합법적 인 XML이 필요합니다. &amp;를 대체하지 않고 법적 만들기

한 가지 방법은 CDATA 섹션에 텍스트를 만드는 것입니다 :

<description><![CDATA[one word & another]]></description> 
+0

확실히 맞습니다. 보상하기 위해 코드 스 니펫을 조정했습니다. 내 질문에 대한 답을 가지고 있습니까? 실제로 URL 불법 문자를 유효한 문자로 대체하는 방법입니다. 즉 URL 이스케이프 문자입니까? –

+0

올바른 내용이지만 질문에 대한 답변이 아닙니다. – elzapp

1

XSLT 2.0을 사용할 수 있습니까? 나는 당신의 모든 문제를 해결할 멋진 URL 인코딩 기능이 있기 때문에 언급 만한다.

<xsl:value-of select="url:encode('This is URL encoded')" /> 
+0

XSLT 2를 사용하고 싶습니다만 .NET 구현에 어떤 구현을 사용해야할지 모르겠습니다. –

+0

아마도 올바른 방향을 알려줄 것입니다. http://stackoverflow.com/questions/94047/are-net-3 -5-xpath-classes-and-methods-xslt-2-0-compatible –

1

나의 목적을 위해,이 솔루션들 중 어느 것도 작동하지 않았다. 나는 고유의 프레임 워크 내에서 작업하고 엔티티를 사용했다 :

&#38; 

는 내가 XSL 템플릿의 컨텍스트에서 URI 문자열에 추가 매개 변수를 추가 할 수 있었다있는 유일한 방법이었다.