早上好,
我想要做什么:我有以下 xml(它是 xml 的一部分,不是完整的)
<?xml version="1.0" encoding="UTF-8" ?>
<tv generator-info-name="Takealug EPG Grabber Ver. 1.1.2 matrix" generator-info-url="https://github.com/DeBaschdi/service.takealug.epg-grabber">
<!-- CHANNEL LIST -->
<channel id="Warner TV Film">
<display-name lang="ch">Warner TV Film</display-name>
</channel>
<channel id="Warner TV Serie HD">
<display-name lang="de">Warner TV Serie HD</display-name>
</channel>
<!-- PROGRAMME LIST -->
<programme start="20220111114500 0000" stop="20220111143500 0000" channel="Warner TV Film">
<title lang="ch">Der Soldat James Ryan</title>
<desc lang="ch">(US) 1997 ? FSK 16 ? IMDb:★★★★☆
Captain John Miller soll den Soldaten James Ryan finden und lebend in Sicherheit bringen, um seiner Mutter den letzten Sohn zu retten.</desc>
<date>1997</date>
<category lang="ch">Adventure / Western / War</category>
<country>US</country>
<rating>
<value>16</value>
</rating>
<star-rating system="IMDb">
<value>8.6/10</value>
</star-rating>
</programme>
<programme start="20220112222500 0000" stop="20220112231500 0000" channel="Warner TV Serie HD">
<title lang="de">Lethal Weapon</title>
<sub-title lang="de">Mein Plan, dein Plan</sub-title>
<desc lang="de"> 2016 ? S1 E3 ? FSK 12
Riggs und Murtaugh bekommen es mit einem Drogenkartell zu tun. Wie es scheint, ist auch Murtaughs ehemaliger Ausbilder Ned Brower in die Geschichte verwickelt. Als der Fall zu schwierig für sie wird, holt das Duo ihren Kollegen Cruz als Verst?rkung an Bord. Riggs kommt nicht mit Mirandas Tod zurecht, w?hrend Murtaugh und Trish Probleme haben, einmal Zeit für Zweisamkeit zu finden.</desc>
<date>2016</date>
<category lang="de">Drama (Serie)</category>
<category lang="de">Action</category>
<episode-num system="onscreen">S1 E3</episode-num>
<rating>
<value>12</value>
</rating>
</programme>
</tv>
我想要的輸出:
<tv generator-info-name="Takealug EPG Grabber Ver. 1.1.2 matrix"
generator-info-url="https://github.com/DeBaschdi/service.takealug.epg-grabber"><!-- CHANNEL LIST -->
<channel id="Warner TV Film">
<display-name lang="ch">Warner TV Film</display-name>
</channel>
<channel id="Warner TV Serie HD">
<display-name lang="de">Warner TV Serie HD</display-name>
</channel>
<!-- PROGRAMME LIST -->
<programme start="20220111114500 0000"
stop="20220111143500 0000"
channel="Warner TV Film">
<sub-title>Adventure / Western / War | 1997 | US | FSK: 16</sub-title>
<title lang="ch">Der Soldat James Ryan</title>
<desc lang="ch">(US) 1997 ? FSK 16 ? IMDb:★★★★☆
Captain John Miller soll den Soldaten James Ryan finden und lebend in Sicherheit bringen, um seiner Mutter den letzten Sohn zu retten.</desc>
<rating>
<value>16</value>
</rating>
<star-rating system="IMDb">
<value>8.6/10</value>
</star-rating>
</programme>
<programme start="20220112222500 0000"
stop="20220112231500 0000"
channel="Warner TV Serie HD">
<sub-title>S1 E3 | Drama (Serie) | Action | 2016 | FSK: 12</sub-title>
<title lang="de">Lethal Weapon: Mein Plan, dein Plan</title>
<desc lang="de"> 2016 ? S1 E3 ? FSK 12
Riggs und Murtaugh bekommen es mit einem Drogenkartell zu tun. Wie es scheint, ist auch Murtaughs ehemaliger Ausbilder Ned Brower in die Geschichte verwickelt. Als der Fall zu schwierig für sie wird, holt das Duo ihren Kollegen Cruz als Verst?rkung an Bord. Riggs kommt nicht mit Mirandas Tod zurecht, w?hrend Murtaugh und Trish Probleme haben, einmal Zeit für Zweisamkeit zu finden.</desc>
<rating>
<value>12</value>
</rating>
</programme>
</tv>
所以我想要的是合并元素標題和子標題。并且元素 episode-num、category、date、rating - 組合為新元素子標題。
我嘗試了什么:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- IDENTITY TRANSFORM -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- REWRITE PROGRAMME -->
<xsl:template match="programme">
<xsl:copy>
<xsl:copy-of select="@*"/>
<title><xsl:value-of select="concat(title, ' ', sub-title)" /></title>
<xsl:apply-templates select="*[name()!='title' and name()!='sub-title']" />
</xsl:copy>
</xsl:template>
<xsl:template match="programme">
<xsl:copy>
<xsl:copy-of select="@*"/>
<sub-title><xsl:value-of select="episode-num, category, date, country" separator=" | "/><xsl:text> | FSK: </xsl:text> <xsl:value-of select="rating/value"/></sub-title>
<xsl:apply-templates select="*[name()!='episode-num' and name()!='category'and name()!='date' and name()!='country']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
這就是我得到的輸出:
<tv generator-info-name="Takealug EPG Grabber Ver. 1.1.2 matrix"
generator-info-url="https://github.com/DeBaschdi/service.takealug.epg-grabber">
<!-- CHANNEL LIST -->
<channel id="Warner TV Film">
<display-name lang="ch">Warner TV Film</display-name>
</channel>
<channel id="Warner TV Serie HD">
<display-name lang="de">Warner TV Serie HD</display-name>
</channel>
<!-- PROGRAMME LIST -->
<programme start="20220111114500 0000"
stop="20220111143500 0000"
channel="Warner TV Film">
<sub-title>Adventure / Western / War | 1997 | US | FSK: 16</sub-title>
<title lang="ch">Der Soldat James Ryan</title>
<desc lang="ch">(US) 1997 ? FSK 16 ? IMDb:★★★★☆
Captain John Miller soll den Soldaten James Ryan finden und lebend in Sicherheit bringen, um seiner Mutter den letzten Sohn zu retten.</desc>
<rating>
<value>16</value>
</rating>
</programme>
<programme start="20220112222500 0000"
stop="20220112231500 0000"
channel="Warner TV Serie HD">
<sub-title>S1 E3 | Drama (Serie) | Action | 2016 | FSK: 12</sub-title>
<title lang="de">Lethal Weapon</title>
<sub-title lang="de">Mein Plan, dein Plan</sub-title>
<desc lang="de"> 2016 ? S1 E3 ? FSK 12
Riggs und Murtaugh bekommen es mit einem Drogenkartell zu tun. Wie es scheint, ist auch Murtaughs ehemaliger Ausbilder Ned Brower in die Geschichte verwickelt. Als der Fall zu schwierig für sie wird, holt das Duo ihren Kollegen Cruz als Verst?rkung an Bord. Riggs kommt nicht mit Mirandas Tod zurecht, w?hrend Murtaugh und Trish Probleme haben, einmal Zeit für Zweisamkeit zu finden.</desc>
<rating>
<value>12</value>
</rating>
</programme>
</tv>
我嘗試了一些事情(fe 更改了輸入的順序),但我無法創建一個 xsl,其中兩個更改(副標題 -> 標題和劇集編號、類別、日期、評級 -> 副標題)都得到實施. 我不確定我的謬誤是什么?希望有人可以幫助我,拜托。Thaaanks提前:-)
uj5u.com熱心網友回復:
有很多方法可以做到這一點,但這里有一個解決方案:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- IDENTITY TRANSFORM -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Replace title value with concatenation of title and sub-title -->
<xsl:template match="programme/title">
<xsl:copy>
<!-- If sub-title exists, concatenate with title. Else output title as-is. -->
<xsl:choose>
<xsl:when test="../sub-title">
<xsl:value-of select="concat(., ' ', ../sub-title)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
<!-- Insert new sub-title element -->
<sub-title>
<xsl:value-of select="concat(../episode-num, ' ', ../category, ' ', ../date, ' ', ../country)"/>
</sub-title>
</xsl:template>
<!-- Remove original sub-title element -->
<xsl:template match="programme/sub-title"/>
</xsl:stylesheet>
看到它在這里作業:https ://xsltfiddle.liberty-development.net/6qjt5Rv
uj5u.com熱心網友回復:
我這樣做了,除了你的代碼來連接標題和副標題:(我不得不洗掉這個代碼:
<!-- Remove original sub-title element -->
<xsl:template match="programme/sub-title"/>
獲得正確的輸出。
<!-- IDENTITY TRANSFORM -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Replace title value with concatenation of title and sub-title -->
<xsl:template match="programme/title">
<xsl:copy>
<!-- If sub-title exists, concatenate with title. Else output title as-is. -->
<xsl:choose>
<xsl:when test="../sub-title">
<xsl:value-of select="concat(., ': ', ../sub-title)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
<!-- Insert new sub-title element -->
<xsl:template match="programme/sub-title">
<xsl:copy>
<xsl:choose>
<xsl:when test="../episode-num">
<xsl:value-of select="concat(../episode-num, ' | ', ../category, ' | ', ../date, ' | ', ../country)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(../category, ' | ', ../date, ' | ', ../country)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411829.html
標籤:
