Heim  >  Artikel  >  Backend-Entwicklung  >  Codebeispiel mit XSLT zum Parsen von XML in XML

Codebeispiel mit XSLT zum Parsen von XML in XML

怪我咯
怪我咯Original
2017-04-10 11:21:341454Durchsuche

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>


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 27a152dc97efaaaf052b1ebe2186f09a...d56e9a6b61cad852bfc1882295a848f9 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>

Hier Wir definieren zunächst eine Datei mit dem Namen Für Ebenenparameter verwenden wir eine Syntax wie 9f46d50fc1efb18c47a5f022a5fd4c2a und dann in der Hauptvorlage (43243beb2fcda3ec2ce639590e7c2e59...< ;/xsl:template>) Wenn Sie eine Vorlage hinzufügen, weisen Sie den Parametern Werte zu:
ca90d88675738db87d7b04a71bd97b48 5fab6f4ef5ba67beefbf8b64843865fa 546e973636cedaa8b683fd88387bbca8, 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
ca90d88675738db87d7b04a71bd97b48

f38bc1ca77331bc3261377d58a07351c

ff93f53840efed4c90b2bec5eafab21d 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>
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 30cd28415b412f0c7b80669bf4acc576...c078c4fd130ec324d38bc095c4eaeb79 d5d6e75bd640df627ff3451c7e49476a ;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>


三、符号转义以及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很强大,有很多功能都没有涉及,当然,我还要继续学习和研究。

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!

Stellungnahme:
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