2016-12-05 1 views
1

Как я могу, пожалуйста, включите ниже (заглавная буква теги т.е. <RSS> и прописной буквы атрибуты т.е. TYPE="audio/mpeg")Строчные все имена тегов и атрибутов внутри RSS XML с помощью XSLT

<RSS xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> 
    <CHANNEL> 
     <title>Example Title</title> 
     <LINK>Example Link</link> 
     <atom:link HREF="http://example.com/feed" REL="self" TYPE="application/rss+xml"/> 
     <itunes:subtitle>Example subtitle with itunes namespace</itunes:subtitle> 
     <itunes:owner> 
      <itunes:name>OWNER NAME</itunes:name> 
      <itunes:email>[email protected]</itunes:email> 
     </itunes:owner> 
     <ITEM> 
      <TITLE>Title Name here</TITLE> 
      <itunes:author>Author name here</itunes:author> 
      <ENCLOSURE TYPE="audio/mpeg" URL="http://www.podtrac.com/abc.mp3" LENGTH="31805"/> 
     </ITEM> 
    </CHANNEL> 
</RSS> 

В этом (строчные буквы теги т.е. <rss> и нижний регистр атрибуты т.е. type="audio/mpeg")

<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> 
    <channel> 
     <title>Example Title</title> 
     <link>Example Link</link> 
     <atom:link href="http://example.com/feed" rel="self" type="application/rss+xml"/> 
     <itunes:subtitle>Example subtitle with itunes namespace</itunes:subtitle> 
     <itunes:owner> 
      <itunes:name>OWNER NAME</itunes:name> 
      <itunes:email>[email protected]</itunes:email> 
     </itunes:owner> 
     <item> 
      <title>Title Name here</title> 
      <itunes:author>Author name here</itunes:author> 
      <enclosure TYPE="audio/mpeg" url="http://www.podtrac.com/abc.mp3" length="31805"/> 
     </item> 
    </channel> 
</rss> 

Использование XSLT?

ПРИМЕЧАНИЕ:

  1. должно быть все теги и все атрибуты, которые строчные, не только мои примеры те из <RSS> в <rss> и TYPE="audio/mpeg" к type="audio/mpeg"
  2. Я буду использовать PHP для запуска это
  3. Пожалуйста, обратите внимание на то, что строка 1 для определения пространства имен xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" внутри метки <rss> - это должно оставаться
  4. Пожалуйста, обратите внимание на пункты Itunes пространства имен, таких как <itunes:name>OWNER NAME</itunes:name> - они должны оставаться точно так же
+0

Заканчивать http://stackoverflow.com/questions/586231/how-can-i-convert-a-string-to-upper-or-lower-case-with-xslt – Meyer

+0

@SMeyer К сожалению, это не работает. Он удаляет пространства имен, поэтому в конце моего вопроса не удается записать число 2 и 3 в конце моего вопроса. – mrmrw

+0

Ссылка была в основном для функций нижнего регистра. Я рекомендую вам опубликовать минимальную исполняемую версию вашего XSLT-кода здесь, чтобы было легче увидеть, что происходит не так. Имейте в виду, что stackoverflow не является службой записи кода. – Meyer

ответ

2

Это дает желаемый результат в XSLT-1.0:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"> 
    <xsl:output indent="yes" /> 
    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" /> 
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> 

    <!-- lowercase'es all elements names and copies namespaces--> 
    <xsl:template match="*"> 
     <xsl:variable name="rawName" select="substring-before(name(), ':')"/> 
     <xsl:element name="{translate(name(), $uppercase, $smallcase)}" namespace="{namespace-uri()}"> 
      <xsl:copy-of select="namespace::*"/> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:element> 
    </xsl:template> 

    <!-- lowercase'es all attribute names --> 
    <xsl:template match="@*"> 
     <xsl:attribute name="{translate(name(), $uppercase, $smallcase)}"> 
      <xsl:value-of select="." /> 
     </xsl:attribute> 
    </xsl:template> 

    <!-- copies the rest --> 
    <xsl:template match="text() | comment() | processing-instruction()"> 
     <xsl:copy/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Абсолютно невероятно. Элегантный, отлично работает. Ты гений! Огромное спасибо. Я верну вам все возможное, отвечая на целую кучу других вопросов о людях на StackOverflow, чтобы распространить любовь. Еще раз спасибо! – mrmrw

+0

Также есть ключевая строка «"? Это то, что мне не хватало? – mrmrw

+0

Я действительно очень благодарен за это :) – mrmrw

Смежные вопросы