XML/XSLT stylesheet/local name
Версия от 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