xslt파싱의 기본 형식은 다음과 같습니다. 필요한 친구는 참고로 xslt를 사용하여 파싱하는
의 기본 형식은 다음과 같습니다. 예를 들어
코드는 다음과 같습니다.
<?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/> <xsl:template match="/"> <html> <body> //这里可以包含一些xhtml的标签 </body> </html> </xsl:template> </xsl:stylesheet>
스타일시트 언어 ), xsl은 xml의 스타일 시트이고 xsl은 xslt(XML 문서를 변환하는 데 사용되는 언어), x-path(XML 문서에서 탐색하는 데 사용되는 언어), 🎜>xsl-fo의 세 부분으로 구성됩니다. (XML 문서 형식을 지정하는 언어) 이전 코드에서 설명한 대로 http://www.php.cn/에서 관련 내용에 대한 튜토리얼을 찾을 수 있습니다. 그런 식으로 xslt는 xml 버전으로 시작하여 변환합니다. 형식은
xslt는 처음 접해서 잘 모르겠습니다. . 완전히 이해되지는 않았습니다. 아래는 제가 배우고 사용할 때 접한 몇 가지 핵심 사항입니다.
1. 재귀 및 매개변수 전달 방법: 예를 들어 xml 파일은 다음과 같습니다.
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="digui.xsl"?> <person name="Otto" sex="mael" age="60"> <person name="Sandra" sex="mael" age="35"> <person name="Lichao" sex="femael" age="34"> <person name="Zhangsan" sex="mael" age="12"/> </person> <person name="Eric" sex="femael" age="36"> <person name="HaLi" sex="mael" age="18"/> </person> <person name="Lisi" sex="mael" age="30"> <person name="HeLi" sex="mael" age="6"/> <person name="Andy" sex="femael" age="13"/> </person> </person> </person>
이제 실제로 가족 관계를 표현하기 위해 xslt를 작성해야 합니다. , 가족 관계는 가계도가 있으므로 서로 다른 수준의 들여쓰기를 출력하여 이 관계를 표현합니다. 그러면 가장 작은 세대가 마지막에 들여쓰기되어 가장 많이 들여쓰기되는 수준입니다. xsl 파일의 코드는 다음과 같습니다.
<?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/> <xsl:template match="/"> <html> <body> <xsl:apply-templates select="person"> <xsl:with-param name="level" select="'0'"/> </xsl:apply-templates> </body> </html> </xsl:template> <xsl:template match="person"> <xsl:param name="level"/> <p style="text-indent:{$level}em">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p> <xsl:apply-templates select="person"> <xsl:with-param name="level" select="$level + 2"/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet>
여기서 먼저 level이라는 매개변수를 정의합니다. 템플릿에서 < 할당과 같은 구문을 사용하여
이 방법은 매개변수 수준의 값을 누적하여 재귀를 달성합니다. 레이어가 렌더링될 때마다 매개변수 값이 2로 추가되어 가계도의 구조를 실현하기 위해 다양한 들여쓰기 수준을 실현하고 여기서는 @name과 같은 @+ 속성을 사용하여 값을 얻습니다. 노드 속성의
2. 매개변수를 사용하여 대체 줄의 색상을 변경합니다.
여전히 위의 예와 매개변수 수준을 인용하면서 매개변수에 +2(짝수) 대신 +1(홀수)을 지정합니다. ) 재귀 중에 (.. test="$level mod 2 = 0") 또는 (.. test="$level mod 2 = 1")을 통해 홀수 또는 짝수 행을 선택할 수 있습니다.
은 홀수 행과 짝수 행에 대해 다르므로 대체 행의 색상을 변경하는 효과를 얻습니다. 구체적인 코드는 다음과 같습니다.
코드는 다음과 같습니다.
<?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html' version='1.0' encoding='GB2312' indent='yes'/> <xsl:template match="/"> <html> <body> <xsl:apply-templates select="person"> <xsl:with-param name="level" select="'0'"/> </xsl:apply-templates> </body> </html> </xsl:template> <xsl:template match="person"> <xsl:param name="level"/> <xsl:choose> <xsl:when test="$level mod 2 = 0"> <p style="text-indent:{$level}em;background-color:#DDD">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p> </xsl:when> <xsl:otherwise> <p style="text-indent:{$level}em;background-color:#EEE">name:<xsl:value-of select="@name"/>,sex:<xsl:value-of select="@sex"/>,age:<xsl:value-of select="@age"/></p> </xsl:otherwise> <xsl:apply-templates select="person"> <xsl:with-param name="level" select="$level + 1"/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet>
三、符号转义以及CDATA语法:
目前碰到的只有“<”和“>” 要转义成<和>如果在表达式里出现这两个符号,页面在预览的时候就会报错;
另外我们需要将原文件的内容原封不动的输出来,包括换行或上面的大于和小于号等页面元素,这时候就需要CDATA这个标签, CDATA全称character data,翻译为字符数据,数据不进行转义直接输出。语法格式如下:
例如:
]]>
在页面上显示的内容将是"
四、几个教程中并没有提到的名词:
1、local-name();例子:
2、
用apply时,引擎自动搜索与当前select指定xpath的匹配节点相匹配的template(该template必须有属性match)并使用该template进行处理,此时需要指定的是select的path。
用call时就跟其它语言调用函数一样,必须指定name属性,相应的,该template必须有name属性,当然,也可以在这时with-param(当然相应的模板中有对应的param才行,不过这个不强制要求)。通过设置mode属性可以调用同一内容的不同表现形式,这个由自己去定义。
3、count(ancestor::*)这种写法是计算当前节点有多少个祖先节点,当然 ancestor也可以用child,following-sibling等xpath关系。
五、对于要符合多条件的判断,xslt不能很好的支持:
以家族树为例,我要取一个位于第二层的,名字叫Lichao的人,如果按字面理解我们可以写成
以上是在学习和使用xslt对xml进行解析的过程中的一些感想和记录,xslt很强大,有很多功能都没有涉及,当然,我还要继续学习和研究。
위 내용은 xslt를 사용하여 xml을 xhtml로 구문 분석하는 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!