Codebeispiel mit XSLT zum Parsen von XML in XML

怪我咯
Freigeben: 2017-04-10 11:21:34
Original
1397 Leute haben es durchsucht

xsltDas Grundformat für die Analyse ist wie folgt. Freunde, die es benötigen, können es für Referenz: Das Grundformat von

unter Verwendung von xslt zum Parsen lautet wie folgt: Beispielsweise lautet der

-Code wie folgt:

<?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>
Nach dem Login kopieren


XSL bezieht sich auf die Extended Style Sheet Language (EXtensible Stylesheet Language), xsl ist ein Stylesheet von XML, xsl besteht aus drei Teilen, nämlich: xslt (eine Sprache zum Konvertieren von XML-Dokumenten) und x-path (eine Sprache zum Navigieren in XML-Dokumenten). ) , xsl-fo (eine Sprache zum Formatieren von XML-Dokumenten), Tutorials zu verwandten Inhalten finden Sie unter http://www.php.cn/
Wie im vorherigen Code beschrieben, xslt beginnt mit der XML-Version und wird in das Format von ... konvertiert. Dies ist das erste Mal, dass ich xslt kontaktiere Ich habe kein gründliches Verständnis davon. Hier ist nur eine Liste einiger wichtiger Punkte, auf die ich gestoßen bin, als ich es gelernt und verwendet habe Als Beispiel für den Stammbaum sieht die XML-Datei so aus:

Der Code lautet wie folgt:

Jetzt müssen wir ein XSLT schreiben, um das auszudrücken Tatsächlich handelt es sich bei der Familienbeziehung um einen Stammbaum, daher drücken wir eine solche Beziehung durch die Ausgabe verschiedener Einrückungsebenen aus. Der größte Vorfahre wird dann nach Generation eingerückt und am Ende am stärksten eingerückt . Auf diese Weise entsteht die Hierarchie des Baums; der Code der XSL-Datei lautet:

<?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>
Nach dem Login kopieren

Hier Wir definieren zunächst eine Datei mit dem Namen Für Ebenenparameter verwenden wir eine Syntax wie und dann in der Hauptvorlage (...< ;/xsl:template>) Wenn Sie eine Vorlage hinzufügen, weisen Sie den Parametern Werte zu:
, der Wert des Parameters level wird zunächst als „0“ zugewiesen und wir verwenden den Wert des Parameters level ($level) als Einzugswert, z als text-indent:{$level}em, also beim Rendern von XML-Inhalten wird die erste Ebene nicht eingerückt. Nach dem Rendern der ersten Ebene übergeben wir

Um eine Rekursion zu erreichen, sodass jede Ebene gerendert wird, addieren Sie 2 zum Parameterwert und realisieren so unterschiedliche Einrückungsebenen, um die Struktur des Stammbaums zu realisieren. Lassen Sie mich hier auch erwähnen, dass wir @+-Attribute wie @name verwenden, um sie zu erhalten der Wert des Knotenattributs.

<?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>
Nach dem Login kopieren
2. Verwenden Sie Parameter, um die Farben in alternativen Zeilen zu ändern:


Unter Berufung auf das obige Beispiel und die Parameterebene geben wir den Parameter +1 (ungerade Zahl) anstelle von +2 (gerade Zahl). ) während der Rekursion können Sie über (.. test="$level mod 2 = 0") oder (.. test="$level mod 2 = 1") ungerade oder gerade Zeilen auswählen. Wir verwenden ... ;give Die
Hintergrundfarbe
ist für ungerade und gerade nummerierte Zeilen unterschiedlich, wodurch der Effekt einer Farbänderung in alternativen Zeilen erzielt wird. Der spezifische Code lautet wie folgt:


Der Code lautet wie folgt:

<?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>
Nach dem Login kopieren


三、符号转义以及CDATA语法:
目前碰到的只有“<”和“>” 要转义成<和>如果在表达式里出现这两个符号,页面在预览的时候就会报错;
另外我们需要将原文件的内容原封不动的输出来,包括换行或上面的大于和小于号等页面元素,这时候就需要CDATA这个标签, CDATA全称character data,翻译为字符数据,数据不进行转义直接输出。语法格式如下:

例如:
]]>
在页面上显示的内容将是"";
四、几个教程中并没有提到的名词:
1、local-name();例子:,这里所表达的意思就是当前节点的名字。
2、...,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的人,如果按字面理解我们可以写成...,但是这样写在预览xml的时候就会报错,我也想用条件里面套条件这样的写法,也不符合语法,查了很多相关的资料,没有找到很好的解决办法。
以上是在学习和使用xslt对xml进行解析的过程中的一些感想和记录,xslt很强大,有很多功能都没有涉及,当然,我还要继续学习和研究。

Das obige ist der detaillierte Inhalt vonCodebeispiel mit XSLT zum Parsen von XML in XML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!