XPath-퀵 가이드
XPath를 배우기 전에 먼저 XSL을 이해해야합니다. Extensible S타일 시트 L고뇌. CSS가 HTML이므로 XML과 유사합니다.
XSL의 필요성
HTML 문서의 경우 테이블, div, span 등과 같은 태그가 미리 정의되어 있습니다. 브라우저는 스타일을 추가하고 CSS 스타일을 사용하여 표시하는 방법을 알고 있습니다. 그러나 XML 문서의 경우 태그가 미리 정의되어 있지 않습니다. XML 문서를 이해하고 스타일을 지정하려면World Wide Web Consortium (W3C)XML 기반 스타일 시트 언어로 작동 할 수있는 XSL을 개발했습니다. XSL 문서는 브라우저가 XML 문서를 렌더링하는 방법을 지정합니다.
다음은 XSL의 주요 부분입니다-
XSLT − XML 문서를 다양한 다른 유형의 문서로 변환하는 데 사용됩니다.
XPath − XML 문서를 탐색하는 데 사용됩니다.
XSL-FO − XML 문서의 형식을 지정하는 데 사용됩니다.
XPath 란 무엇입니까?
XPath는 W3C (World Wide Web Consortium)의 공식 권장 사항입니다. XML 파일에서 정보를 찾기위한 언어를 정의합니다. XML 문서의 요소 및 속성을 탐색하는 데 사용됩니다. XPath는 XML 문서에서 관련 정보를 조회하는 데 사용할 수있는 다양한 유형의 표현식을 제공합니다.
Structure Definitions − XPath는 요소, 속성, 텍스트, 네임 스페이스, 처리 명령, 주석 및 문서 노드와 같은 XML 문서의 일부를 정의합니다.
Path Expressions − XPath는 XML 문서에서 노드 또는 노드 목록을 선택하는 강력한 경로 표현식을 제공합니다.
Standard Functions − XPath는 문자열 값, 숫자 값, 날짜 및 시간 비교, 노드 및 QName 조작, 시퀀스 조작, 부울 값 등의 조작을위한 풍부한 표준 함수 라이브러리를 제공합니다.
Major part of XSLT − XPath는 XSLT 표준의 주요 요소 중 하나이며 XSLT 문서 작업을 위해서는 지식이 있어야합니다.
W3C recommendation − XPath는 W3C (World Wide Web Consortium)의 공식 권장 사항입니다.
XPath로 작업하는 동안 다음 사항을 염두에 두어야합니다.
- XPath는 XSLT 표준 의 핵심 구성 요소입니다 .
- XSLT는 XPath 없이는 작동하지 않습니다.
- XPath는 XQuery와 XPointer의 기반입니다.
XPath 표현식은 일반적으로 노드 세트를 선택하기 위해 패턴을 정의합니다. 이러한 패턴은 XSLT에서 변환을 수행하거나 XPointer에서 주소 지정을 위해 사용합니다.
XPath 사양은 XPath 표현식 실행의 출력이 될 수있는 7 가지 유형의 노드를 지정합니다.
- Root
- Element
- Text
- Attribute
- Comment
- 처리 명령
- Namespace
XPath는 경로 표현식을 사용하여 XML 문서에서 노드 또는 노드 목록을 선택합니다.
다음은 XML 문서에서 노드 / 노드 목록을 선택하는 데 유용한 경로 및 표현식 목록입니다.
S. 아니. | 표현 및 설명 |
---|---|
1 | node-name 주어진 이름이 "nodename"인 모든 노드를 선택하십시오. |
2 | / 선택은 루트 노드에서 시작됩니다. |
삼 | // 선택은 선택과 일치하는 현재 노드에서 시작됩니다. |
4 | . 현재 노드를 선택합니다. |
5 | .. 현재 노드의 부모를 선택합니다. |
6 | @ 속성 선택 |
7 | student 예-이름이 "student"인 모든 노드를 선택합니다. |
8 | class/student 예-클래스의 자식 인 모든 학생 요소를 선택합니다 |
9 | //student 문서의 어디에 있든 모든 학생 요소를 선택합니다. |
예
이 예에서는 샘플 XML 문서 인 students.xml 및 해당 스타일 시트 문서를 만들었습니다. students.xsl 아래에서 XPath 표현식을 사용합니다. select 각 학생 노드의 롤 번호, 이름, 성, 별명 및 마크의 값을 가져 오는 다양한 XSL 태그의 속성.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td> <xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
출력 확인
이 장에서는 일반적인 유형의 노드, XPath 정의 및 처리를 다루는 세부 사항에서 XPath 표현식을 볼 수 있습니다.
S. 아니. | 노드 유형 및 설명 |
---|---|
1 | 뿌리 XML 문서의 루트 요소 노드입니다. |
2 | 요소 요소 노드. |
삼 | 본문 요소 노드의 텍스트. |
4 | 속성 요소 노드의 속성. |
5 | 논평 논평 |
위치 경로는 XML 문서에서 노드의 위치를 지정합니다. 이 경로는 절대적이거나 상대적 일 수 있습니다. 위치 경로가 루트 노드 또는 '/'로 시작하면 절대 경로입니다. 다음은 절대 경로를 사용하여 요소를 찾는 몇 가지 예입니다.
/class/student − 클래스 루트 노드 내에서 학생 노드를 선택합니다.
<xsl:for-each select = "/class/student">
/class/student/firstname − 클래스 루트 노드 내에서 학생 노드의 이름을 선택합니다.
<p><xsl:value-of select = "/class/student/firstname"/></p>
예
이 예에서는 샘플 XML 문서를 만들었습니다. students.xml 및 해당 스타일 시트 문서 students.xsl XPath 표현식을 사용합니다.
다음은 사용 된 샘플 XML입니다.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<tr>
<td><xsl:value-of select = "/class/student[1]/@rollno"/></td>
<td><xsl:value-of select = "/class/student[1]/firstname"/></td>
<td><xsl:value-of select = "/class/student[1]/lastname"/></td>
<td><xsl:value-of select = "/class/student[1]/nickname"/></td>
<td><xsl:value-of select = "/class/student[1]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[2]/firstname"/></td>
<td><xsl:value-of select = "/class/student[2]/lastname"/></td>
<td><xsl:value-of select = "/class/student[2]/nickname"/></td>
<td><xsl:value-of select = "/class/student[2]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student[3]/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[3]/firstname"/></td>
<td><xsl:value-of select = "/class/student[3]/lastname"/></td>
<td><xsl:value-of select = "/class/student[3]/nickname"/></td>
<td><xsl:value-of select = "/class/student[3]/marks"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
출력 확인
위치 경로는 XML 문서에서 노드의 위치를 지정합니다. 이 경로는 절대적이거나 상대적 일 수 있습니다. 위치 경로가 선택한 노드로 시작하면 상대 경로입니다.
다음은 상대 경로를 사용하여 요소를 찾는 몇 가지 예입니다.
firstname − 학생 노드와 관련된 이름을 선택합니다.
<p><xsl:value-of select = "firstname"/></p>
예
이 예에서는 샘플 XML 문서를 만들었습니다. students.xml 및 해당 스타일 시트 문서 students.xsl XPath 표현식을 사용합니다.
다음은 사용 된 샘플 XML입니다.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
출력 확인
위치 경로는 절대 또는 상대 경로를 사용하여 노드의 위치를 정의하므로 축은 다음과 같은 관계로 요소를 식별하는 데 사용됩니다. parent, child, sibling, 등. 축은 요소가 요소에 상대적으로 놓여있는 축을 참조하기 때문에 이름이 지정됩니다.
다음은 다양한 축 값 목록입니다.
S. 아니. | 축 및 설명 |
---|---|
1 | ancestor 루트 노드까지 부모를 포함하는 현재 노드의 조상을 나타냅니다. |
2 | ancestor-or-self 현재 노드와 조상을 나타냅니다. |
삼 | attribute 현재 노드의 속성을 나타냅니다. |
4 | child 현재 노드의 자식을 나타냅니다. |
5 | descendant 현재 노드의 하위 항목을 나타냅니다. 하위 항목에는 리프 노드까지 노드의 자식이 포함됩니다 (더 이상 자식 없음). |
6 | descendant-or-self 현재 노드와 그 하위 항목을 나타냅니다. |
7 | following 현재 노드 뒤에 오는 모든 노드를 나타냅니다. |
8 | following-sibling 컨텍스트 노드의 다음 형제를 나타냅니다. 형제는 현재 노드와 동일한 수준에 있으며 부모를 공유합니다. |
9 | namespace 현재 노드의 네임 스페이스를 나타냅니다. |
10 | parent 현재 노드의 부모를 나타냅니다. |
11 | preceding 현재 노드 이전 (즉, 여는 태그 이전)에있는 모든 노드를 나타냅니다. |
12 | self 현재 노드를 나타냅니다. |
다음은 축 사용에 대한 몇 가지 예입니다.
firstname − 학생 노드와 관련된 이름을 선택합니다.
<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
예
이 예에서는 샘플 XML 문서를 만들었습니다. students.xml 및 해당 스타일 시트 문서 students.xsl XPath 표현식을 사용합니다.
다음은 사용 된 샘플 XML입니다.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<!-- Comment: This is a list of student -->
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
<br/>
<xsl:text>First Student: </xsl:text>
<xsl:value-of select = "/class/student/child::firstname" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
출력 확인
이 장에서는 일반적으로 사용되는 XPath에 대해 자세히 설명하는 XPath 연산자 및 함수를 살펴 봅니다. defines 과 handles. XPath는 노드, 문자열, 숫자 및 부울 유형에 대한 연산자 및 함수를 정의합니다.
다음은 우리가 논의 할 목록입니다.
S. 아니. | 연산자 / 기능 및 설명 |
---|---|
1 | 비교 연산자 값을 비교하기위한 비교 연산자. |
2 | 부울 연산자 'and', 'or'및 'not'기능을 확인하는 부울 연산자. |
삼 | 숫자 함수 / 연산자 숫자에 대한 연산자 / 함수. |
4 | 문자열 함수 다양한 문자열 기능. |
5 | 노드 기능 / 연산자 노드에 작용하는 다양한 기능과 연산자. |
XPath는 XPath 표현식과 함께 사용할 노드에서 다음 와일드 카드를 정의합니다.
S. 아니. | 와일드 카드 및 설명 |
---|---|
1 | * 모든 노드와 일치하는 데 사용됩니다. |
2 | . 컨텍스트에서 현재 노드를 일치시키는 데 사용됩니다. |
삼 | @* 모든 속성과 일치하는 데 사용 |
4 | node() 모든 유형의 노드를 일치시키는 데 사용 |
예
이 예에서는 각 학생을 반복하여 세부 정보가있는 <student> 요소의 테이블을 만듭니다.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<xsl:apply-templates select = "class/*" />
</body>
</html>
</xsl:template>
<xsl:template match = "class/*">
<xsl:apply-templates select = "@rollno" />
<xsl:apply-templates select = "firstname" />
<xsl:apply-templates select = "lastname" />
<xsl:apply-templates select = "nickname" />
<xsl:apply-templates select = "marks" />
<br />
</xsl:template>
<xsl:template match = "@rollno">
<span style = "font-size = 22px;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "firstname">
First Name:<span style = "color:blue;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "lastname">
Last Name:<span style = "color:green;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "nickname">
Nick Name:<span style = "color:red;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "marks">
Marks:<span style = "color:gray;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
</xsl:stylesheet>
출력 확인
술어는 대괄호로 작성된 XPath 표현식을 나타냅니다. 특정 조건에 대해 노드 집합에서 선택한 노드를 제한하는 것을 의미합니다. 예를 들면
S. 아니. | 술어 및 설명 |
---|---|
1 | /class/student[1] 클래스 요소의 자식 인 첫 번째 학생 요소를 선택합니다. |
2 | /class/student[last()] 클래스 요소의 하위 인 마지막 학생 요소를 선택합니다. |
삼 | /class/student[@rolllno = 493] rollno 493으로 학생 요소를 선택합니다. |
4 | /class/student[marks>85] 마크가 85보다 큰 학생 요소를 선택합니다. |
예
이 예에서는 각 학생을 반복하여 세부 정보가있는 <student> 요소의 테이블을 만듭니다. 학생 노드의 위치를 계산 한 다음 일련 번호와 함께 학생 세부 정보를 인쇄합니다.
students.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student[1]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[last()]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[@rollno = 493]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[marks > 85]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>