Xml XSLT:为什么/*/*重写/*/x?
我正在学习XSLT,我有以下问题。我有以下XML:Xml XSLT:为什么/*/*重写/*/x?,xml,xslt,Xml,Xslt,我正在学习XSLT,我有以下问题。我有以下XML: <a> <x>testo 0 <rad>testo 1</rad> </x> <b> <p> <w> <z>testo 2</z> </w> </p> </b> <y> <p/>
<a>
<x>testo 0
<rad>testo 1</rad>
</x>
<b>
<p>
<w>
<z>testo 2</z>
</w>
</p>
</b>
<y>
<p/>
<y>testo 3
<d>testo 4</d>
</y>
</y>
<f/>
测试0
testo 1
testo 2
Testo3
Testo4
应使用XSLT 1.0将其转换为thix xml:
<r>
<nx>
<oldx/>
<new>
<rad/>
</new>
</nx>
<b>
<new>
<p/>
</new>
</b>
<new>
<p/>
</new>
<new>
<y/>
</new>
<f/>
</r>
以下是我的尝试:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<xsl:element name="r">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/*/x">
<nx><xsl:element name="oldx"/>
<xsl:apply-templates/></nx>
</xsl:template>
<xsl:template match="/*/y">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="/*/*">
<xsl:element name="{name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/*/*/*">
<new>
<xsl:element name="{name()}"/>
<xsl:apply-templates/>
</new>
</xsl:template>
<xsl:template match="text()">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
但是当我应用这个转换时,程序将要翻译x元素,它应用这个模板:/*/*而不是/*/x
我知道/*/*匹配根的每个“子元素”,但据我所知/*/x应该优先于x元素。您能帮助我理解XSLT的错误吗
谢谢你的帮助
编辑:
例如,如果我有以下输入:
<a> <c> <a>
<b>1</b>
<b>2</b>
</a>
<f><b>3</b>
</f>
</c>
<b> <c>4</c> 5 </b>
</a>
1.
2.
3.
4 5
我应用这个变换:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="a">
<A><xsl:apply-templates/></A>
</xsl:template>
<xsl:template match="b">
<B><xsl:value-of select="."/></B>
</xsl:template>
<xsl:template match="c">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}"><xsl:apply-templates/></xsl:element>
</xsl:template>
</xsl:stylesheet>
元素“a”、“b”、“c”如我所料匹配。答案是两者都没有优先级。查看XSLT建议,了解模板优先级如何工作的详细信息(它远没有您预期的复杂),以及在有疑问时明确设置优先级 或者,根据2.0规范,但本质上相同,并且可能更可读:
答案是两者都没有优先权。查看XSLT建议,了解模板优先级如何工作的详细信息(它远没有您预期的复杂),以及在有疑问时明确设置优先级 或者,根据2.0规范,但本质上相同,并且可能更可读:
如何“明确设置优先级”?请将
元素上的优先级属性设置为高于或低于默认值(或更具体地说,冲突元素的值)@keshlam:谢谢您的回复。你能看看我在第一篇文章末尾所做的编辑吗?谢谢请不要编辑帖子来添加补充问题。如果问题在答案写出来后已经改变了,那么尝试跟随一条线索是没有希望的。回答问题后,只需编辑它以修复简单错误。对于补充问题,如果无法通过评论处理,请开始新的帖子。如何“明确设置优先级”?将
元素上的priority
属性设置为高于或低于默认值(或者更具体地说,冲突元素的值)@keshlam:谢谢您的回复。你能看看我在第一篇文章末尾所做的编辑吗?谢谢请不要编辑帖子来添加补充问题。如果问题在答案写出来后已经改变了,那么尝试跟随一条线索是没有希望的。回答问题后,只需编辑它以修复简单错误。对于补充问题,如果无法通过评论进行处理,请开始新的帖子。