2008 13 2008 8월

XSL 안으로 구분된 문자열을 Tokenizing

귀하의 요건 가치 구분된 문자열을 포함하는 XML의 노드 값을 분할 경우, 개별 항목에 다음, 당신은 바로 이곳에 도달했습니다 ... 아래 예제에서 본다 구. 당신이 XML과 XSL은 약간 잘 알고있다면 ... 당신이 어떤 설명도 필요 할거라 생각하지 않아요.
XSL, 호출 템플릿 : 문자열 - 전, XSL : 또한이 예제는 XSL과 같은 스타일 기능의 사용을 포함 문자열 - 후에, 당신이 눈독들이면.

변환하기 위해 XML (food.xml) : -
작업 태그 "키워드"에서 쉼표로 구분된 문자열을 tokenize하는 것입니다 가정

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl) : -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

결과 출력 HTML : -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

말할 필요도없이 그냥 원하는 구분자로 매개 변수를 "delimitr"를 변경


2008 4 2008 8월

XSL의 위치 ()에 문제가 ... 또는 그것인가?

오늘 XSL을 만드는 동안 나는이 strage 문제를했다. 그물에 걸쳐 답변을 찾아 보았지만 아무것도 발견 couldnt .... 사실 내 생각! 나는 힘 내 문제가 뭔지, 그래서 어떤 꿈에 보여?

어쨌든! 만약 당신이 나한테 만톤 감사 것입니다 ... 너무 그리고 어떻게든이 페이지에 비행 관리 포스의 힘을하여이 똑같은 문제가 ... 그리고 당신이 실수로 이상한 운명이 페이지에 착륙하고있다면 될거야 언젠가, 당신은이 문제에 직면하는 경우 XSL 개발자, 미래 원인 동안만를 적어 볼까, 그러면 포스가 함께하길하지 않을 수 있습니다.

문제 진술 :
거기에 여러 항목을 가진 두 노드가 어디에,이 XML을 가지고이 두 노드 사이 항목은 1-1 대응 있습니다. 아래 예제에서 노드 <array의 각 항목 name="PLAYURL" /> 노드 <array에 항목 (해당 위치) 관련 name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

내가 <array name="SITENAME">로 루프, 그리고 내가 <array name="PLAYURL">에서 관련 항목을 (해당 위치에서)받을하려는 자, 난, 루프를 가지고

당신이 normaly 할을 시도 것은 ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

죄송합니다! 이렇게는 안되 실거예요 ... 아!! Surpised ...

이제 아마 시도 이런 게 좋습 ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

그리고 다시 이런 일을 실거예요 ... 이제 당신은 머리를 긁적 당신은 어떤 스타일을 모른다고 생각하는 모든 사람을 만나려하고 도움이 될 수있다 당신은 다른 모든 옵션을 시도 ... 그리고 여전히 작동 실거예요 ... 글쎄! 그게 전부 내게 atleast 어떻게 ...

절망 되네요! 이걸 써봐

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

어떻게 될지는 나한테 물어 없다. 내가 정당한 이유가 없다 ... 어쩔한다면! 댓글을 떨어뜨리지 마십시오. 꽤 usefull 수도 있습니다. 또! 이 게시물에 대한 더 좋은 제목이있다면, 내 라인을 떨어뜨 할 :)


2008 2008년 5월 4일

XSL 안에 포함 XSL

XML / XSL가 domian가 변환한다면, 우리는 (재사용 가능한 제출 예정) 라이브러리 항목을 사용하도록 동적 코드 peice 원하는 경우가 있습니다. 무슨 뜻인지, 아마이 예제의 시나리오는 더욱 분명하게 할 수 있습니다.

당신이 웹사이트를 만들고 (그리고 XML, XSL transfroms 당연히 사용) 및 페이지의 대부분은 코멘트 모듈를 가지려고하고 상상해보세요. 글쎄! 다음 중 당신이 모든 페이지 템플리트 (이 내 말을하지만, 유지 보수 및 재작업 악몽을 가지고 있겠지) 또는 더 나은에이 코드를 복사하거나 붙여넣을, 당신은 (당신의 페이지에 당신이 그것을 원하는 위치까지 멈춘 수 포함시킬 파일을 만듭니다 들) ...
그럼 어떻게 XSL 포함시킬 파일을 생성하고 다른 XSL 파일 안에 그것을 포함합니까? 방법은이 ...

그냥 몇 가지 일을 확실하게하는 방법 ... 여기가 만든 것이 파일의 간단한 목록입니다 ... 여기, 우리 음식이라는 상위 페이지로 과일과 야채에 대한 정보를 포함합니다.

1. food.xml - 변환이 적용됩니다되는 XML 데이터 파일
2. food.xsl - 우리 food.xml를 변환합니다 기본 스타일 파일,
3. inc_fruits.xsl - XSL은 과일 데이터를 렌더링 파일을 포함
4. inc_vegtables.xsl - XSL은 vetetables 데이터를 렌더링 파일을 포함

나는 많은 설명이 있다고 생각하지 말아, 위의 요소의 코드는, 자기 설명합니다 ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ BODY>
</ HTML>
다 </ xsl : 템플릿>
다 </ xsl : 스타일 시트>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

여기에 위의 모든 파일 (252 다운로드) 다운로드


2008 2008년 4월 4일

XSLT에서 XML 노드 속성 작업

당신이 XML과 XSL을 사용하면 특성과 스타일에 XML 노드의 값을들을 플레이해야 할 때, 그때 당신은 시간을 가로질러 왔을 수도 있습니다. 그들은 이것에 대해 긴 숨이 찬 정보가있는 사이트의 부하이며, 내가 찾은 누구는 짧고 정확한없는 것 ... 이것은 XML / XSL 튜토리얼은 아니지만 컨닝 목록의 일종을 함께 넣어 내 시도 ...

우리가 일하는 것을 예제 XML은 다음과 같습니다 ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

그럼 XSL을 사용하여 Google 위의 XML을 변환 시작하자

예제 1 : 선택된 속성에 값 표시하기

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

HTML 결과 보일까

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


예제 2 :를 통해 반복 및 모든 XML 속성 이름과 값 표시

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

HTML 결과 보일까


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


여기에 위의 모든 파일 (245 다운로드) 다운로드



이 공간을보고, 나는 새로운 발견으로이 업데이 트에 반영하겠습니다 ...


NDK 홈 | IT를 표현 | 표현 구개 | 표현 Penmenship | 표현 공포 | 표현 자신