XML/XSLT stylesheet/local name

Материал из Web эксперт
Версия от 18:22, 25 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

local-name() function

File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<emailList>
  <head:header xmlns:head="http://www.domain.ru/namespace/header">
    <title>Email List</title>
    <maintainer>Joe</maintainer>
  </head:header>
  <person type="personal" id="p001">
    <name>person1</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="work" id="p002">
    <name>person2</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="personal" id="p003">
    <name>person3</name>
    <email>p3@hotmail.ru</email>
  </person>
</emailList>

File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:head="http://www.domain.ru/namespace/header">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="/">
    <xsl:apply-templates select="emailList/head:header" />
  </xsl:template>
  <xsl:template match="head:header">
    <xsl:element name="{local-name()}">
      <xsl:copy-of select="child::*" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<header>
   <title xmlns:head="http://www.domain.ru/namespace/header">Email List</title>
   <maintainer xmlns:head="http://www.domain.ru/namespace/header">Joe</maintainer>
</header>



Local part: <xsl:value-of select="local-name()"/>

File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<pp>
    <P>Element name: xsl:stylesheet</P>
    <P>Local part: stylesheet</P>
    <P>Namespace URI: http://www.w3.org/1999/XSL/Transform</P>
    <P>ID:</P>
</pp>

File: Transform.xslt
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <P>Element name: <xsl:value-of select="name()"/></P>
    <P>Local part: <xsl:value-of select="local-name()"/></P>
    <P>Namespace URI: <xsl:value-of select="namespace-uri()"/></P>
    <P>ID: <xsl:value-of select="id(.)"/></P>
    <xsl:apply-templates />
  </xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?><P>Element name: pp</P><P>Local part: pp</P><P>Namespace URI: </P><P>ID: </P>
    <P>Element name: P</P><P>Local part: P</P><P>Namespace URI: </P><P>ID: </P>Element name: xsl:stylesheet
    <P>Element name: P</P><P>Local part: P</P><P>Namespace URI: </P><P>ID: </P>Local part: stylesheet
    <P>Element name: P</P><P>Local part: P</P><P>Namespace URI: </P><P>ID: </P>Namespace URI: http://www.w3.org/1999/XSL/Transform
    <P>Element name: P</P><P>Local part: P</P><P>Namespace URI: </P><P>ID: </P>ID:



match="head:header"

File: Data.xml
<?xml version="1.0" encoding="utf-8"?>
<emailList>
  <head:header xmlns:head="http://www.domain.ru/namespace/header">
    <title>Email List</title>
    <maintainer>Joe</maintainer>
  </head:header>
  <person type="personal" id="p001">
    <name>person1</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="work" id="p002">
    <name>person2</name>
    <email>p@hotmail.ru</email>
  </person>
  <person type="personal" id="p003">
    <name>person3</name>
    <email>p3@hotmail.ru</email>
  </person>
</emailList>
File: Transform.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:head="http://www.domain.ru/namespace/header">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="/">
    <xsl:apply-templates select="emailList/head:header" />
  </xsl:template>
  <xsl:template match="head:header">
    <xsl:element name="{local-name()}">
      <xsl:copy-of select="child::*" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>
Output:
<?xml version="1.0" encoding="UTF-8"?>
<header>
   <title xmlns:head="http://www.domain.ru/namespace/header">Email List</title>
   <maintainer xmlns:head="http://www.domain.ru/namespace/header">Joe</maintainer>
</header>



namespace-uri and local-name

File: Data.xml
<poem xmlns:red="http://www.wbex.ru/red"
  xmlns:blue="http://www.wbex.ru/blue">
  <red:title>From Book IV</red:title>
  <blue:verse>line 1</blue:verse>
  <red:verse>line 2</red:verse>
  <blue:verse>line 3</blue:verse>
  <verse>line 4</verse>
</poem>

File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:red="http://www.wbex.ru/red"
  xmlns:blau="http://www.wbex.ru/blue" version="1.0">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
  <xsl:template match="*[local-name()="verse"]">
    Found a verse: name
    <xsl:value-of select="name()" />
    local-name
    <xsl:value-of select="local-name()" />
    namespace-uri
    <xsl:value-of select="namespace-uri()" />
    contents
    <xsl:apply-templates />
  </xsl:template>
  <xsl:template match="red:title" />
</xsl:stylesheet>

Output:

  
  
    Found a verse: name
    blue:verse
    local-name
    verse
    namespace-uri
    http://www.wbex.ru/blue
    contents
    line 1
  
    Found a verse: name
    red:verse
    local-name
    verse
    namespace-uri
    http://www.wbex.ru/red
    contents
    line 2
  
    Found a verse: name
    blue:verse
    local-name
    verse
    namespace-uri
    http://www.wbex.ru/blue
    contents
    line 3
  
    Found a verse: name
    verse
    local-name
    verse
    namespace-uri
    
    contents
    line 4