>  기사  >  백엔드 개발  >  xslt를 사용하여 xml을 xhtml로 구문 분석하는 코드 예제

xslt를 사용하여 xml을 xhtml로 구문 분석하는 코드 예제

怪我咯
怪我咯원래의
2017-04-10 11:21:341432검색

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=&#39;html&#39; version=&#39;1.0&#39; encoding=&#39;GB2312&#39; indent=&#39;yes&#39;/> 
<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 버전으로 시작하여 변환합니다. 형식은 27a152dc97efaaaf052b1ebe2186f09a...d56e9a6b61cad852bfc1882295a848f9
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=&#39;html&#39; version=&#39;1.0&#39; encoding=&#39;GB2312&#39; indent=&#39;yes&#39;/> 
<xsl:template match="/"> 
<html> 
<body> 
<xsl:apply-templates select="person"> 
<xsl:with-param name="level" select="&#39;0&#39;"/> 
</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이라는 매개변수를 정의합니다. 템플릿에서 < 할당과 같은 구문을 사용하여
ca90d88675738db87d7b04a71bd97b48 ff93f53840efed4c90b2bec5eafab21d 매개변수 수준의 값은 처음에 "0"으로 할당되며 text-indent:{$와 같이 매개변수 수준($level)의 값을 들여쓰기 값으로 사용합니다. level}em이므로 xml 콘텐츠를 렌더링할 때 첫 번째 레이어에 들여쓰기가 없습니다. 첫 번째 레이어를 렌더링한 후
ca90d88675738db87d7b04a71bd97b48 ;xsl:with-param name="level" select=" $level + 2"/>
ff93f53840efed4c90b2bec5eafab21d
이 방법은 매개변수 수준의 값을 누적하여 재귀를 달성합니다. 레이어가 렌더링될 때마다 매개변수 값이 2로 추가되어 가계도의 구조를 실현하기 위해 다양한 들여쓰기 수준을 실현하고 여기서는 @name과 같은 @+ 속성을 사용하여 값을 얻습니다. 노드 속성의

2. 매개변수를 사용하여 대체 줄의 색상을 변경합니다.
여전히 위의 예와 매개변수 수준을 인용하면서 매개변수에 +2(짝수) 대신 +1(홀수)을 지정합니다. ) 재귀 중에 (.. test="$level mod 2 = 0") 또는 (.. test="$level mod 2 = 1")을 통해 홀수 또는 짝수 행을 선택할 수 있습니다. 0d8a6dad6809e070db87c2f3ea451d8e...c078c4fd130ec324d38bc095c4eaeb79 b490e3a477a758f8d417150b585fd42a...0deb431ca822a5ae1672ac1bd025a592 ;give 배경색
은 홀수 행과 짝수 행에 대해 다르므로 대체 행의 색상을 변경하는 효과를 얻습니다. 구체적인 코드는 다음과 같습니다.
코드는 다음과 같습니다.

<?xml version="1.0" encoding="GB2312"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method=&#39;html&#39; version=&#39;1.0&#39; encoding=&#39;GB2312&#39; indent=&#39;yes&#39;/> 
<xsl:template match="/"> 
<html> 
<body> 
<xsl:apply-templates select="person"> 
<xsl:with-param name="level" select="&#39;0&#39;"/> 
</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语法:
目前碰到的只有“e84aacd5f768f485facc4bd6b8750f46” 要转义成67bffed8d39c986beaddeed3e8cd5568如果在表达式里出现这两个符号,页面在预览的时候就会报错;
另外我们需要将原文件的内容原封不动的输出来,包括换行或上面的大于和小于号等页面元素,这时候就需要CDATA这个标签, CDATA全称character data,翻译为字符数据,数据不进行转义直接输出。语法格式如下:
37257cd4c239f5a1e042c3f605185721
例如:
db42c9d5aa7564004c0daff71411f68acb884f44f2f1937276917c04c3676183]]>
在页面上显示的内容将是"aac23f448b702b8b93a75e0945ea2f62cb884f44f2f1937276917c04c3676183";
四、几个教程中并没有提到的名词:
1、local-name();例子:00361f9c2ab69ee1cbfeb1ba4da20b50,这里所表达的意思就是当前节点的名字。
2、f3619dc8969622cfe315844131c7ff3b...dc728c903cc44e1b1becadaa331990fe,call-template和apply-template的区别,简单说apply是应用,call是调用。
用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的人,如果按字面理解我们可以写成361bc00243761ed36605043ffdd1ba40...c078c4fd130ec324d38bc095c4eaeb79,但是这样写在预览xml的时候就会报错,我也想用条件里面套条件这样的写法,也不符合语法,查了很多相关的资料,没有找到很好的解决办法。
以上是在学习和使用xslt对xml进行解析的过程中的一些感想和记录,xslt很强大,有很多功能都没有涉及,当然,我还要继续学习和研究。

위 내용은 xslt를 사용하여 xml을 xhtml로 구문 분석하는 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.