hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • XML
XPath trong XML

XPath trong XML

  • 21-06-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Khái niệm XPath
    • Giới thiệu về XPath
      • XSLT
      • XQuery
    • Lợi ích của XPath
    • Tài liệu XML trong XPath
    • Biểu diễn XPath
    • Toán tử trong XPath
    • Ví dụ của toán tử Xpath
    • Các loại đối sánh/so khớp
  • Các hàm và biểu thức XPath
  • Biểu thức XPath
        • Node-set
        • Boolean
        • Number
        • String
    • Hàm XPath
    • Hàm note-set
    • Hàm boolean
    • Hàm Numeric
    • Hàm string
    • Result Tree Fragments
  • Làm việc với các Style khác nhau
    • Chuyển đổi bằng Bộ xử lý XSLT
    • Chuyển đổi XML bằng XSLT

Khái niệm XPath

Giới thiệu về XPath

XPath có thể được coi là một ngôn ngữ truy vấn như SQL. Tuy nhiên, thay vì trích xuất thông tin từ cơ sở dữ liệu, nó trích xuất thông tin từ tài liệu XML. XPath là ngôn ngữ để truy xuất thông tin từ tài liệu XML. XPath được sử dụng để điều hướng qua các thành phần và thuộc tính trong tài liệu XML. Do đó, XPath cho phép xác định các phần của tài liệu XML.

XPath cung cấp một cú pháp chung như thể hiện trong hình cho các tính năng được chia sẻ bởi XSLT và XQuery:

XSLT

XSLT là ngôn ngữ để chuyển đổi thông tin tài liệu XML sang XML, HTML hoặc văn bản

XQuery

XQuery xây dựng trên XPath và là ngôn ngữ để trích xuất thông tin từ các tài liệu XML.

Lợi ích của XPath

XPath được thiết kế cho các tài liệu XML. Nó cung cấp một cú pháp duy nhất mà bạn có thể sử dụng cho các truy vấn, đánh địa chỉ và các mẫu. XPath ngắn gọn, đơn giản và mạnh mẽ.

XPath có cácXPath được thiết kế để sử dụng trong nhiều ngữ cảnh. Nó được áp dụng để cung cấp các liên kết đến các nút, để tìm kiếm các kho lưu trữ và cho nhiều ứng dụng khác. ưu điểm như sau:

  • Cú pháp đơn giản cho các trường hợp đơn giản và phổ biến.
  • Bất kỳ đường dẫn nào có thể xuất hiện trong tài liệu XML và bất kỳ tập hợp điều kiện nào cho các node trong đường dẫn đều có thể được chỉ định
  • Bất kỳ nút nào trong tài liệu XML đều có thể được xác định duy nhất.

XPath được thiết kế để sử dụng trong nhiều ngữ cảnh. Nó được áp dụng để cung cấp các liên kết đến các nút, để tìm kiếm các kho lưu trữ và cho nhiều ứng dụng khác.

Tài liệu XML trong XPath

XPath có một số kiểu node như sau:

  • Root : Cây XPath có một node gốc duy nhất chứa tất cả các node khác trong cây
  • Element : Mỗi phần tử trong tài liệu có một node phần tử tương ứng xuất hiện trong cây bên dưới node gốc, Trong một node phần tử xuất hiện tất cả các loại node tương ứng khác.
  • Attribute : Mỗi nút phần tử có một tập hợp các node thuộc tính được liên kết; phần tử là cha của mỗi nút thuộc tính này. Tuy nhiên, một node thuộc tính không phải là node con của phần tử cha của nó.
  • Text : Dữ liệu ký tự được nhóm thành các node văn bản. Các ký tự bên trong nhận xét, hướng dẫn xử lý và giá trị thuộc tính không tạo ra các node văn bản. Node văn bản có một node cha và nó cũng có thể là node con.
  • Comment : Có một nút nhận xét cho mọi nhận xét, ngoại trừ bất kỳ nhận xét nào xảy ra trong khai báo loại tài liệu. Nhận xét: nút có một nút cha và nó cũng có thể là nút con.
  • Processing instruction : Có một nút hướng dẫn xử lý cho mọi Processing instruction, ngoại trừ mọi hướng dẫn xử lý xảy ra trong khai báo loại tài liệu. Processing instruction có node cha. nút và nó cũng có thể là nút con.
  • Namespace : Mỗi phần tử có một tập hợp các nút không gian tên được liên kết. Mặc dù nút không gian tên có nút cha, nhưng nút không gian tên không được coi là con của nút cha vì chúng không được chứa trong cha. nút, nhưng được sử dụng để cung cấp thông tin mô tả về nút cha của chúng.
Node TypeString ValueExpanded Name
rootĐược xác định bằng cách nối các giá trị chuỗi của tất cả các phần tử con của nút văn bản theo thứ tự tài liệu.Không
elementĐược xác định bằng cách nối các giá trị chuỗi của tất cả các phần tử con của nút văn bản theo thứ tự tài liệu.Thẻ phần tử, bao gồm tiền tố namespace (nếu có).
attributeGiá trị chuẩn hóa của thuộc tính.Thẻ phần tử, bao gồm tiền tố namespace (nếu có)
textDữ liệu ký tự chứa trong node văn bảnKhông
commentNội dung của comment (không bao gồm )Không
processing instructionPhần của hướng dẫn xử lý tuân theo mục tiêu và bất kỳ khoảng trắng nàoMục tiêu của hướng dẫn xử lý.
namespaceURI của namespaceTiền tố của namespace

Biểu diễn XPath

Một truy vấn XPath hoạt động trên một tài liệu XML được định dạng tốt (well-form document) sau khi nó đã được phân tích cú pháp thành một cấu trúc cây.

Ví dụ cấu trúc XML

Cấu trúc cây XPath tương ứng:

Toán tử trong XPath

Một biểu thức XPath trả về một tập hợp node, một giá trị logic, một chuỗi hoặc một số. XPath cung cấp các toán tử số học dấu phẩy động cơ bản và một số toán tử so sánh và boolean.

Các biểu thức XPath được xây dựng bằng cách sử dụng các toán tử và ký tự đặc biệt như trong bảng dưới:

Toán tử Mô tả
/Toán tử con; chọn con ngay lập tức của danh sách bên trái
//Đệ quy gốc; tìm kiếm phần tử được chỉ định ở bất kỳ độ sâu nào
.Cho biết bối cảnh hiện tại
..Phần tử cha của node ngữ cảnh hiện tại
*Ký tự đại diện (wildcard); chọn tất cả các phần tử bất kể tên phần tử
@Thuộc tính; tiền tố cho một tên thuộc tính
:Dấu tách namespace, tách tiền tố namespace khỏi phần tử hoặc tên thuộc tính

Ví dụ của toán tử Xpath

Biểu thứcĐề cập tới
Author/FirstNameTất cả các phần tử trong phần tử của nút ngữ cảnh hiện tại
Bookstore//TitleTất cả các phần tử <Title> một hoặc nhiều cấp nằm sâu trong phần tử <Bookstore>
Bookstore//Book/Excerpt//WorkTất cả các phần tử <Work> ở bất kỳ đâu bên trong phần tử con <Excerpt> nằm trong phần tử <Book> nằm ở bất kỳ đâu trong phần tử <Bookstore>
.//TitleTất cả các phần tử một hoặc nhiều cấp độ sâu trong ngữ cảnh hiện tại

Ngoài ra, danh sách các toán tử có thể được sử dụng trong biểu thức XPath biểu diễn như sau:

Toán tửMô tảVí dụGiá trị trả về
|Tính hai tập hợp node//book | //cdTrả một tập hợp node với tất cả
các phần tử book và cd,
+Cộng20+1030
–Trừ20-1010
*Nhân2*48
divChia (division)28div142
=Bằngprice=8.5Trả về true nếu price = 8.5
Trả về false nếu price khác 8.5
!=Khácprice!=8.5Trả về true nếu price khác 8.5
Trả về false nếu price = 8.5
<Nhỏ hơnprice<8.5Trả về true nếu price nhỏ hơn 8.5
Trả về false nếu price không nhỏ hơn 8.5
<=Nhỏ hơn hoặc bằngprice<=8.5Trả về true nếu price nhỏ hoặc bằng hơn 8.5
Trả về false nếu price lớn hơn 8.5
>Lớn hơnprice>8.5Trả về true nếu price lớn hơn 8.5
Trả về false nếu price nhỏ hơn hoặc bằng 8.5
>=Lớn hơn hoặc bằngprice>=8.5Trả về true nếu price lớn hơn hoặc bằng 8.5
Trả về false nếu price nhỏ hơn 8.5
orHoặcprice=8.5 or price=9.0Trả về true nếu price = 8.5 hoặc price = 9.0
andVàprice>8.5 and price<9.0Trả về true nếu price > 8.5 và price < 9.0
modChia lấy dư15 mod 43

Các loại đối sánh/so khớp

XPath được sử dụng để tạo các mẫu. Thuộc tính match của phần tử xsl:template hỗ trợ một cú pháp phức tạp cho phép thể hiện chính xác những node nào sẽ được so khớp. Thuộc tính select của xsl:apply-templates, xsl:value-of, xsl:for-each, xsl:copy-of, và xsl:sort hỗ trợ siêu tập hợp cú pháp này thậm chí còn mạnh mẽ hơn, cho phép thể hiện chính xác các node được chọn và node không được chọn.

Một số loại so khớp quan trọng là:

So khớp theo tên

Các phần tử nguồn được xác định đơn giản bằng tên của nó, sử dụng thuộc tính match. Giá trị được cung cấp cho thuộc tính khớp được gọi là pattern (mẫu so khớp).

Cú pháp:

<xsl:template match="ElementName">

Mẫu trên sẽ so khớp với bất kỳ phần tử nào tên là <ElementName>

So khớp theo tổ tiên

Cú pháp:

<xsl:template match="P//EM">

Như ví dụ trên, một kết quả khớp có thể được thực hiện bằng cách sử dụng tổ tiên của phần tử. Thẻ sau sẽ khớp với bất kỳ phần tử EM nào có ‘P’ là tổ tiên/nguồn gốc.

So khớp theo tên phần tử

Mẫu cơ bản nhất chứa một tên phần tử khớp với tất cả các phần tử có tên đó. Mã sau minh họa ví dụ. Template này so khớp với Product. và đánh dấu đậm Product_ID con của chúng.

Cú pháp:

<xsl:template match="Product">
<xsl:value-of select="Product_ID" />
</xsl:template>

So khớp theo phần tử gốc

Để cho phép tất cả các node con kế thừa các thuộc tính trên phần tử gốc của tài liệu, hãy sử dụng một dấu gạch chéo phía trước để biểu thị phần tử gốc.

<xsl:template match="/"></xsl:template>

Nó sẽ truy vấn tới phần tử gốc

So khớp theo thuộc tính

Cú pháp:

<xsl:template match="element_name|['attribute' (attribute-name)=attribute_value]">
</xsl:template>

Cú pháp này sử dụng dấu ngoặc vuông để giữ tên và giá trị thuộc tính.

Ví dụ:

<xsl:template match="Product[@attributename=attributevalue]">
</xsl:template>

Các hàm và biểu thức XPath

Biểu thức XPath

Biểu thức XPath là các câu lệnh có thể trích xuất thông tin hữu ích từ cây XPath. Thay vì chỉ tìm các nút, người ta có thể đếm chúng, cộng các giá trị số, so sánh các chuỗi, v.v. Chúng giống như các câu lệnh trong ngôn ngữ lập trình chức năng. Mỗi biểu thức XPath đánh giá một giá trị duy nhất.

Có bốn loại biểu thức trong XPath. Đó là:

Node-set

Tập hợp nút là một nhóm node không có thứ tự từ tài liệu đầu vào khớp với tiêu chí của biểu thức.

Boolean

Một biểu thức boolean có một trong hai giá trị: true hoặc false. XSLT cho phép bất kỳ loại dữ liệu nào được chuyển đổi thành boolean. Điều này thường được thực hiện một cách ngầm định khi một chuỗi hoặc một số hoặc một tập hợp node được sử dụng ở nơi mà một boolean được mong đợi.

Number

XPath number là các giá trị số hữu ích để đếm các nút và thực hiện phép tính số học đơn giản. Các số như 43 hoặc ~7000 trông giống như số nguyên được lưu trữ dưới dạng double. Các giá trị không phải là số, chẳng hạn như chuỗi và boolean, được tự động chuyển đổi thành số khi cần thiết.

String

Chuỗi là một chuỗi gồm 0 hoặc nhiều ký tự Unicode. Các loại dữ liệu khác có thể được chuyển đổi thành chuỗi bằng cách sử dụng hàm string().

Lưu ý: Cú pháp biểu thức XPath bao gồm các dạng chữ cho chuỗi và số cũng như các hàm của toán tử để thao tác cả bốn loại dữ liệu XPath.

Hàm XPath

XPath xác định các chức năng khác nhau cần thiết cho XPath 2.0, XQuery 1.0 và XSLT 2.0. Các chức năng khác nhau ae Accessor, AnyURT, Node, Error and Trace, Sequence, Context, Boolean, Duration/Date/Time, String, QName và Numeric.

Các hàm Ngôn ngữ Đường dẫn XML (XPath) có thể được sử dụng để tinh chỉnh các truy vấn XPath và nâng cao sức mạnh lập trình cũng như tính linh hoạt của XPath. Mỗi hàm trong thư viện hàm được chỉ định bằng cách sử dụng nguyên mẫu hàm cung cấp kiểu trả về, tên hàm và kiểu đối số. Nếu một loại đối số được theo sau bởi một dấu chấm hỏi, đối số là tùy chọn; mặt khác, đối số là bắt buộc. Tên hàm phân biệt chữ hoa chữ thường.

Tiền tố mặc định cho namespace hàm là fn.

Hàm note-set

Các hàm tập hợp nút nhận một đối số node-set. Những thứ này trả về một tập hợp nút hoặc thông tin về một nút cụ thể trong một tập hợp node. Các hàm thiết lập nút khác nhau là name(), local-name(), namespace-uri() và root().

Cú pháp:

name()

fn:name()
fn:name(nodeset)

local-name()

fn:local-name()
fn:local-name(nodeset)

namespace-uri()

fn:namespace-uri()
fn:namespace-uri(nodeset)

root()
fn:root()
fn:root(node)

Trong đó:

name()

Hàm trả về tên của nút hiện tại hoặc nút đầu tiên trong note-set đã chỉ định.

local-name()

Hàm trả về tên của node hiện tại hoặc node đầu tiên trong tập hợp node được chỉ định mà không có tiền tố namespace

namespace-uri()

Hàm trả về URI không gian tên của nút hiện tại hoặc nút đầu tiên trong node-set.

root()

Hàm trả lại gốc của cây mà nút hiện tại hoặc node được chỉ định thuộc về. Đây thường sẽ là một node tài liệu.

Ví dụ:

Tạo file book.xml

<?xml-stylesheet href="book.xsl" type="text/xsl"?>
<Catalog xmlns="http://wwww.web888.vn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://hocvietcode.com book.xsd">
    <Book>
        <Author>Gambardella Mathew</Author>
        <Title>XML Developer's Guide</Title>
        <Genre>Computer</Genre>
        <Price>44.95</Price>
        <PublishDate>2000-10-01</PublishDate>
        <Description>An in-depth look at creating applications with XML.</Description>
    </Book>
</Catalog>

Tạo file book.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://hocvietcode.com"  xmlns="https://hocvietcode.com"
elementFormDefault="qualified">
    <!-- Definination for simple elements  -->
    <xs:element name="Author" type="xs:string"/>
    <xs:element name="Title" type="xs:string"/>
    <xs:element name="Genre" type="xs:string"/>
    <xs:element name="Price" type="xs:decimal"/>
    <xs:element name="PublishDate" type="xs:string"/>
    <xs:element name="Description" type="xs:string"/>
    <!-- Definination for complex elements  -->
    <xs:element name="Book">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Author"/>
                <xs:element ref="Title"/>
                <xs:element ref="Genre"/>
                <xs:element ref="Price"/>
                <xs:element ref="PublishDate"/>
                <xs:element ref="Description"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Catalog">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Book" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Tạo file book.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html" />
    <xsl:template match="/">
        <html>
            <body>
                <h2>Books</h2>
                <table border="1">
                    <tr>
                        <td>
                            <b>namespace-uri()</b>
                        </td>
                        <td>
                            <b>name()</b>
                        </td>
                        <td>
                            <b>local-name()</b>
                        </td>
                        <td>
                            <b>text()</b>
                        </td>
                    </tr>
                    <xsl:apply-templates />
                </table>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="*">
        <tr>
            <td>
                <xsl:value-of select="namespace-uri()" />
            </td>
            <td>
                <xsl:value-of select="name()" />
            </td>
            <td>
                <xsl:value-of select="local-name()" />
            </td>
            <td>
                <xsl:value-of select="text()" />
            </td>
        </tr>
        <xsl:apply-templates select="*" />
    </xsl:template>
</xsl:stylesheet>

Output:

Hàm boolean

Cú pháp Ngôn ngữ Đường dẫn XML (XPath) hỗ trợ các hàm boolean trả về giá trị true hoặc false và có thể được sử dụng với các toán tử so sánh trong các mẫu phù hợp hơn. Một số hàm này là boolean, not, true và false.

boolean(arg)

Cú pháp:

fn:boolean(args)

Ví dụ:

Tạo file boolean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="boolean.xsl" type="text/xsl"?>
<RootElement>
    <Booleann>
        <ChildElm>
        </ChildElm>
    </Booleann>
</RootElement>

Tạo file boolean.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="Booleann">
        <html>
            <body>
                <ul>
                    <li><b>boolean(0)</b> = <xsl:value-of select="boolean(0)" /></li>
                    <li><b>boolean(1)</b> = <xsl:value-of select="boolean(1)" /></li>
                    <li><b>boolean(-100)</b> = <xsl:value-of select="boolean(-100)" /></li>
                    <li><b>boolean('hello')</b> = <xsl:value-of select="boolean('hello')" /></li>
                    <li><b>boolean('')</b> = <xsl:value-of select="boolean('')" /></li>
                    <li><b>boolean(//book)</b> = <xsl:value-of select="boolean(//book)" /></li>
                    <li><b>boolean(//ChildElm)</b> = <xsl:value-of select="boolean(//ChildElm)" /></li>
                </ul>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Output:

not(arg)

Ý nghĩa của một phép toán có thể được đảo ngược bằng cách sử dụng hàm not()

Cú pháp:

fn:not(arg)

Ví dụ: Quy tắc mẫu này chọn tất cả các thành phần Product không phải là con đầu tiên của cha mẹ chúng:

<xsl:template match="PRODUCT[not(position()=1)]">
<xsl:value-of select="." />
</xsl:template>

Thay vào đó, quy tắc mẫu tương tự có thể được viết bằng cách sử dụng toán tử không bằng !=:

<xsl:template match="PRODUCT[position() !=1]">
<xsl:value-of select="." />
</xsl:template>

true()

Hàm true() trả về giá trị boolean true.

Cú pháp:

fn:true()

Ví dụ:

<xsl:value-of select="true()" />

false()

Hàm false() trả về giá trị boolean false.

Cú pháp:

fn:false()

Ví dụ:

<xsl:value-of select="true() or false()" />
<xsl:value-of select="true() and false()" />
<xsl:value-of select="false() and false()" />

Output:

true 
false 
false

Giá trị nhận được từ một biểu thức phụ thuộc vào một số quy tắc như trong bảng:

Loại biểu thứcQuy tắc
node-settrue nếu tập hợp chứa ít nhất một node, sai nếu nó trống.
stringtrue trừ khi chuỗi có độ dài bằng 0.
numbertrue trừ khi giá trị là Zero hoặc NaN (không phải là số).
Result tree fragmentLuôn luôn đúng, bởi vì mỗi phân đoạn chứa ít nhất một node, node gốc của nó.
Quy tắc chuyển đổi boolean

Một số toán tử so sánh các giá trị số để đạt được giá trị Boolean. Tất cả các nút trong tập hợp nút đều được kiểm tra để xác định xem có bất kỳ nút nào trong số chúng thỏa mãn sự so sánh hay không. Các toán tử so sánh được hiển thị trong bảng:

Toán tửTrả về
expr and exprTrue nếu cả hai biểu thức (chuỗi hoặc số) có cùng giá trị, ngược lại là sai.
expr or exprTrue nếu các biểu thức không có cùng giá trị (chuỗi hoặc số), ngược lại là sai.
true()True
false()False
not(expr)True nếu giá trị của biểu thức số đầu tiên Lớn hơn giá trị của biểu thức số thứ hai, ngược lại là sai.
Boolean functions

Hàm Numeric

Cú pháp XPath hỗ trợ các hàm số lấy lại các chuỗi hoặc số và có thể được sử dụng với các toán tử so sánh trong các mẫu bộ lọc. Các hàm số khác nhau là number(arg), floor(num) and round(num)

Các quy tắc để chuyển đổi bất kỳ biểu thức nào thành giá trị số được liệt kê trong bảng:

Loại biểu thứcQuy tắc
Node-setNode đầu tiên được chuyển đổi thành một chuỗi, sau đó quy tắc chuyển đổi chuỗi được sử dụng.
BooleanGiá trị true được chuyển thành số 1 và false thành số 0.
StringNếu chuỗi là sự tuần tự hóa theo nghĩa đen của một số (ví dụ: -123,5), thì chuỗi đó sẽ được chuyển đổi thành số đó. Nếu không, giá trị NaN được sử dụng.
Result tree fragmentGiống như các tập hợp nút, một đoạn cây kết quả được chuyển đổi thành một chuỗi, sau đó được chuyển đổi theo quy tắc chuỗi.
Quy tắc chuyển đổi từ biểu thức thành number

Để thao tác các giá trị số, có nhiều toán tử và hàm khác nhau như trong bảng:

HàmTrả về
expr + exprTổng của hai biểu thức số.
expr – exprHiệu của 2 biểu thức số
expr * exprTích của 2 biểu thức số
expr div exprThương của 2 số
expr mod exprKết quả dư của phép chia lấy dư 2 số
round(expr)Giá trị của biểu thức được làm tròn đến số nguyên gần nhất.
sum(node-set)Tổng giá trị của các node trong tập hợp node . Không giống như các chức năng khác trong bảng này, chức năng này hoạt động trên một tập hợp node thay vì các biểu thức

Cú pháp:

number(arg)
fn:number(arg)

ceiling(num)
fn:ceiling(arg)

floor(num)
fn:floor(arg)

round(num)
fn:round(arg)

Trong đó:

number(arg)

Hàm trả về giá trị số của đối số. Đối số có thể là một boolean, một chuỗi hoặc một tập hợp node.

ceiling(num)

Hàm trả về số nguyên nhỏ nhất lớn hơn đối số truyền vào (làm tròn lên).

round(num)

Hàm trả về số nguyên làm tròn dựa theo phần thập phân đối số (làm tròn lên hoặc xuống tùy theo số thực).

Ví dụ:

Tạo file numbericfunction.xml

<?xml version="1.0"?>
<?xml-stylesheet href="numbericfunction.xsl" type="text/xsl"?>
<NumberList xmlns="http://wwww.web888.vn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://hocvietcode.com numbericfunction.xsd">
    <NumberElement></NumberElement>
</NumberList>

Tạo file numbericfunction.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="https://hocvietcode.com" xmlns="https://hocvietcode.com"
    elementFormDefault="qualified">
    <xs:element name="NumberElement" type="xs:decimal" />
    <xs:element name="NumberList">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="NumberElement" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Tạo file numbericfunction.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" />
    <xsl:template match="/">
        <html>
            <body>
                <h3>Numeric functions</h3>
                <ul>
                    <li>
                        <b>number('-1548') = <xsl:value-of select="number('-1548')" /></b>
                    </li>
                    <li>
                        <b>number('text') = <xsl:value-of select="number('text')" /></b>
                    </li>
                    <li>
                        <b>number('20.5' div '5') = <xsl:value-of select="number('20.5' div '5')" /></b>
                    </li>
                    <li>
                        <b>ceiling('2.5') = <xsl:value-of select="ceiling('2.5')" /></b>
                    </li>
                    <li>
                        <b>round('3.4') = <xsl:value-of select="round('3.4')" /></b>
                    </li>
                      <li>
                        <b>round('-0.6') = <xsl:value-of select="round('-0.6')" /></b>
                    </li>
                </ul>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Output:

Hàm string

Các hàm chuỗi được sử dụng để đánh giá, định dạng và thao tác các đối số chuỗi hoặc để chuyển đổi một đối tượng thành một chuỗi. Các hàm Chuỗi khác nhau được hiển thị trong bảng:

FunctionReturns
concat(string,string,…)Một chuỗi là nối của các đối số.
format-number(number,pattern,decimal-format)Một chuỗi chứa số, được định dạng theo mẫu. Đối số định dạng thập phân tùy chọn trỏ đến một khai báo định dạng gán các ký tự đặc biệt, chẳng hạn như ký tự nhóm, phân tách các nhóm Chữ số với số lượng lớn để dễ đọc.
normalize-space(string)Chuỗi có khoảng trắng ở đầu và theo dõi đã bị xóa và tất cả các ký tự khoảng trắng khác được thay thế bằng khoảng trắng đơn.
substring(string, offset, range)Một chuỗi con của đối số chuỗi, phần bù bắt đầu, các ký tự từ đầu và các ký tự phạm vi kết thúc từ phần bù.
substring-after(string, to-match)Một chuỗi con của đối số chuỗi, bắt đầu ở cuối lần xuất hiện đầu tiên của chuỗi khớp và kết thúc ở cuối chuỗi.
substring-before(string, to-match)Một chuỗi con của đối số chuỗi, bắt đầu ở đầu chuỗi và kết thúc ở đầu lần xuất hiện đầu tiên của chuỗi khớp.
translate(string, characters-to-match, characters-replace-with)Chuỗi có tất cả các ký tự trong chuỗi ký tự khớp được thay thế bằng các ký tự đối ứng của chúng trong chuỗi ký tự thay thế bằng.

Một số hàm hoạt động trên chuỗi và trả về giá trị số hoặc Boolean, được liệt kê trong bảng

FunctionReturns
contain(string,sub)true nếu chuỗi con đã cho xảy ra trong chuỗi, nếu không thì false.
starts-with(string, sub)true nếu chuỗi bắt đầu bằng chuỗi con, ngược lại
string-length(string)Độ dài của chuỗi

Cú pháp:

string(arg)
fn:string(arg)

translate()
fn:translate(string, string, string)

concat()
fn:concat(string,string,...)

substring()
fn:substring(string,start,len)
fn:substring(string,start)

Ví dụ:

Tạo file bookstore.xml:

<?xml-stylesheet href="bookstore.xsl" type="text/xsl"?>
<Booksotre>
    <Book>
        <Author>Toanngo92</Author>
        <Title>XML Developer's Guide</Title>
        <Price>44.95</Price>
    </Book>
    <Book>
        <Author>Toanngo922</Author>
        <Title>Java Developer's Guide</Title>
        <Price>44.00</Price>
    </Book>
    <Book>
        <Author>Toanngo923</Author>
        <Title>Javascript Developer's Guide</Title>
        <Price>44.00</Price>
    </Book>
</Booksotre>

Tạo file bookstore.xsl

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <xsl:value-of select='translate("-------------------Bboks-------------------", "bok", "ook")'/>
                <br/>
                <xsl:value-of select="concat('String 1','string 2')" />
                <xsl:apply-templates select="//Book" />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="Book">
        <xsl:if test="contains(Title,'Java')">
            <div>
                <B>
                    <xsl:value-of select="Title" />
                </B>
                by
                <i>
                    <xsl:value-of select="Author" />
                </i>
                cost <xsl:value-of select="Price" />
            </div>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Output:

Result Tree Fragments

Đoạn cây kết quả là một phần của tài liệu XML không phải là một node hoặc tập hợp các node hoàn chỉnh.

Hoạt động được phép duy nhất trong một đoạn cây kết quả là trên một chuỗi. Hoạt động trên chuỗi có thể liên quan đến việc chuyển đổi chuỗi đầu tiên thành một số hoặc boolean. Đoạn cây kết quả là một loại dữ liệu bổ sung ngoài bốn loại dữ liệu XPath cơ bản (chẳng hạn như chuỗi, số, boolean, tập hợp node).

Một đoạn cây kết quả đại diện cho một đoạn của cây kết quả. Đặc biệt, không được phép sử dụng các toán tử /,// và [] XPath trên các đoạn cây Kết quả,

Làm việc với các Style khác nhau

Chuyển đổi là một trong những kỹ thuật quan trọng và hữu ích nhất để làm việc với XML. XML có thể được biến đổi bằng cách thay đổi cấu trúc, cách đánh dấu và có lẽ cả nội dung của nó sang một dạng khác. Lý do phổ biến nhất để chuyển đổi XML là mở rộng phạm vi tiếp cận của tài liệu sang các lĩnh vực mới bằng cách chuyển đổi nó thành định dạng trình bày.

Một số cách sử dụng transformation là:

  • Định dạng tài liệu để tạo định dạng trình bày chất lượng cao.
  • Thay đổi từ vựng XML này sang từ vựng XML khác.
  • Trích xuất các mẩu thông tin cụ thể và định dạng chúng theo cách khác.
  • Thay đổi một thể hiện của XML thành text
  • Định dạng lại hoặc tạo nội dung.

Lưu ý: transformation có thể được sử dụng để thay đổi nội dung, chẳng hạn như trích xuất một phần tử. Nó thậm chí có thể được sử dụng để lọc một tài liệu XML để thay đổi nó theo những cách rất nhỏ, chẳng hạn như chèn một thuộc tính vào một loại phần tử cụ thể.

Chuyển đổi bằng Bộ xử lý XSLT

Bộ xử lý XSLT lấy hai thứ làm đầu vào: biểu định kiểu XSLT để quản lý quá trình chuyển đổi và tài liệu đầu vào được gọi là cây nguồn. Đầu ra được gọi là cây kết quả.

Công cụ XSLT bắt đầu bằng cách đọc trong biểu định kiểu XSLT và lưu vào bộ nhớ cache dưới dạng bảng tra cứu. XPath định vị các phần của tài liệu XML chẳng hạn như node Phần tử, node Thuộc tính và node Văn bản. Do đó, đối với mỗi node mà XSLT xử lý, nó sẽ tìm trong bảng để áp dụng quy tắc khớp tốt nhất. Bắt đầu từ nút gốc, công cụ XSLT tìm các quy tắc, thực thi chúng và tiếp tục cho đến khi không còn node nào trong node ngữ cảnh của nó được thiết lập để hoạt động. Tại thời điểm đó, quá trình xử lý hoàn tất và công cụ XSLT xuất tài liệu kết quả.

Chuyển đổi XML bằng XSLT

Bước 1: tạo file XML

<?xml version="1.0" encoding="UTF-8"?>

Bước 2: tạo file xsl

<xsl:xml-stylesheet xmlns:xsl="http://www.w4.org/1999/XSL/Transform" version="1.0">
</xsl:xml-stylesheet>

Bước 3: triển khai output như các ví dụ bên trên

<xsl:stylesheet><xsl:output method="html"/>...</xsl:stylesheet>

Để xuất bất kỳ nội dung nào ngoài XML được định dạng tốt, nên sử dụng thẻ <xsl:output>giống như thẻ được hiển thị, chỉ định “text” hoặc “xml”.

Bài tập

Tạo XML và XSLT để quản lý danh sách nhân viên và phòng ban

Cho biết cấu trúc XML như sau:

<company>
<department>
<departmentID>D001</departmentID>
<departmentName>Human Resources</departmentName>
<employees>
<employee>
<employeeID>E001</employeeID>
<employeeName>John Doe</employeeName>
<position>Manager</position>
<contact>
<email>[email protected]</email>
<phone>123-456-7890</phone>
</contact>
<salary currency="USD">75000</salary>
<hireDate>2015-08-01</hireDate>
</employee>
<employee>
<employeeID>E002</employeeID>
<employeeName>Jane Smith</employeeName>
<position>Assistant</position>
<contact>
<email>[email protected]</email>
<phone>098-765-4321</phone>
</contact>
<salary currency="USD">50000</salary>
<hireDate>2018-04-15</hireDate>
</employee>
</employees>
</department>
<department>
<departmentID>D002</departmentID>
<departmentName>IT</departmentName>
<employees>
<employee>
<employeeID>E003</employeeID>
<employeeName>Alice Brown</employeeName>
<position>Developer</position>
<contact>
<email>[email protected]</email>
<phone>456-789-0123</phone>
</contact>
<salary currency="USD">90000</salary>
<hireDate>2017-10-05</hireDate>
</employee>
</employees>
</department>
</company>

  • Sử dụng XSD để validate dữ liệu trên
  • Sử dụng xslt để xuất dữ liệu ra dạng HTML table.

Bài tập 2:

Câu 1: Chuyển đổi Dữ liệu XML thành HTML bằng XSLT

Mục tiêu: Sử dụng tập tin XML đã cho để tạo một XSLT stylesheet chuyển đổi dữ liệu thành bảng HTML hiển thị danh sách nhân viên.

Dữ liệu XML mới:

<company>
    <title>Employee Directory</title>
    <caption>List of Employees</caption>
    <description>This table displays details of employees, including their department and salary.</description>
    <employees>
        <employee>
            <emp_id>101</emp_id>
            <name>Nguyễn Văn A</name>
            <department>HR</department>
            <salary>15000000</salary>
        </employee>
        <employee>
            <emp_id>102</emp_id>
            <name>Trần Thị B</name>
            <department>IT</department>
            <salary>25000000</salary>
        </employee>
        <employee>
            <emp_id>103</emp_id>
            <name>Lê Văn C</name>
            <department>Marketing</department>
            <salary>20000000</salary>
        </employee>
    </employees>
</company>

Yêu cầu:

  1. Tạo tập tin XML hợp lệ: Đảm bảo tập tin có định dạng chính xác. 
  2. Tạo file XSLT có cấu trúc chuẩn: Viết XSLT để chuyển đổi dữ liệu XML thành trang HTML. 
  3. Hiển thị tiêu đề và chú thích: Dữ liệu <title> và <caption> phải xuất hiện trên trang HTML. 
  4. Tạo bảng danh sách nhân viên: Biến <employees> thành bảng HTML gồm các cột:
    • Mã nhân viên
    • Họ tên
    • Phòng ban
    • Lương
  5. Thêm thuộc tính tùy chỉnh trong XML: Cập nhật XML để bổ sung các thuộc tính như class hoặc style nhằm tăng cường giao diện HTML. 

Câu 2: Hiển thị Dữ liệu JSON bằng HTML, CSS, và JavaScript

Mục tiêu: Sử dụng tập tin JSON được cung cấp để hiển thị danh sách dự án trong một bảng có thể tương tác.

{
    "projects": [
        {
            "id": 701,
            "name": "E-commerce Website",
            "client": "ABC Corp",
            "budget": "50000 USD"
        },
        {
            "id": 702,
            "name": "Mobile App",
            "client": "XYZ Ltd",
            "budget": "30000 USD"
        },
        {
            "id": 703,
            "name": "CRM System",
            "client": "DEF Group",
            "budget": "40000 USD"
        }
    ]
}

Yêu cầu:

  1. Tạo tập tin JSON hợp lệ: Định dạng đúng và lưu trữ dữ liệu JSON hợp lệ. (2 điểm)
  2. Phân tích dữ liệu JSON bằng JavaScript: Chuyển đổi dữ liệu JSON thành một mảng đối tượng. 
  3. Tạo bảng hiển thị dữ liệu dự án: Tạo bảng HTML hiển thị thông tin với các cột:
    • Mã dự án
    • Tên dự án
    • Khách hàng
    • Ngân sách
  4. Tải dữ liệu JSON bằng Fetch API: Tải dữ liệu một cách bất đồng bộ từ tập tin JSON. 
  5. Thiết kế CSS responsive: Đảm bảo bảng hiển thị tốt trên mọi thiết bị bằng CSS Grid hoặc Flexbox. 
  6. Chức năng sắp xếp nâng cao: Thêm nút sắp xếp theo ngân sách hoặc tên khách hàng. 

Bạn có muốn điều chỉnh gì thêm không? 🚀

Bài viết liên quan:

XSL và XSLT
Style Sheet – định kiểu trong XML
XML Schema – Lược đồ XML
Document Type Definition – Định nghĩa kiểu tài liệu
XML Namespaces
Giới thiệu về XML

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

KHÁI NIỆM QUẢN LÝ DỰ ÁN CÔNG NGHỆ THÔNG TIN (IT PROJECT MANAGEMENT)

Cấu trúc lập trình và Mảng

Bắt đầu với C#

1. GIỚI THIỆU KHÁI NIỆM CHUẨN MỰC – ĐẠO ĐỨC VÀ VẤN ĐỀ NGHỀ NGHIỆP TRONG CNTT

2. ÁP DỤNG CÁC CHUẨN MỰC VÀ VẤN ĐỀ NGHỀ NGHIỆP TRONG CNTT

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×