xslt を使用して XML を xhtml に解析するコード例

怪我咯
リリース: 2017-04-10 11:21:34
オリジナル
1439 人が閲覧しました

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>
ログイン後にコピー


(XML 文書を変換するための言語)、x-path (XML 文書内をナビゲートするための言語)、xsl-fo (XML ドキュメントをフォーマットするための言語)、http://www .php.cn/この Web サイトの関連コンテンツに関するチュートリアルを検索してください
前のコードで説明したように、xslt は ...
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 というパラメーターを定義します。 構文を使用してテンプレートを作成し、テンプレートをメイン テンプレートに追加するときにパラメータに値を割り当てます ()。 ..)、

/xsl:apply-templates> では、パラメーター レベルの値は最初に「0」に割り当てられており、パラメーター レベル ($level) の値は、text-indent:{$ などのインデント値として使用されます。 level}em なので、XML コンテンツをレンダリングするときに最初のレイヤーはインデントされません。最初のレイヤーをレンダリングした後、


このように、メソッドは再帰を達成するためにパラメータ レベルの値を蓄積します。 value に 2 を追加することで、家系図の構造を実現するためのさまざまなレベルのインデントが実現されます。ここでは、ノード属性の値を取得するために @name などの @+Attribute を使用することも述べておきます。

2. パラメーターを使用して交互の行の色を変更します。

上記の例とパラメーター レベルを引き続き引用し、再帰中にパラメーターに +2 (偶数) の代わりに +1 (奇数) を与え、(. . test=" $level mod 2 = 0") または (.. test="$level mod 2 = 1") は、... ... 奇数行と偶数行に異なる
背景を与える-color
により、インターレースされたカラー変更の効果が得られます。具体的なコードは次のとおりです:
コードは次のとおりです:


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

以上がxslt を使用して XML を xhtml に解析するコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート