什么是属性节点
的OP已经澄清了评论,他的问题是:
是否有可能与任何父元素创建属性节点?
是,在XSLT 2.0一个可以写:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vAttr" as="attribute()">
<xsl:attribute name="x">y</xsl:attribute>
</xsl:variable>
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="$vAttr"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当这种转变被应用在下面的XML文档:
<t/>
想要的,正确的结果生产:
<t x="y"/>
因此,属性被创建为一个独立的项目,没有任何父元素。然后,我们可以将它的一个实例复制到任何元素。
感谢Dimitre为您提供的所有帮助! – Beast 2013-03-04 05:42:48
@野兽,不客气。 – 2013-03-04 06:34:06
在下面bar="baz"
的XML是具有名称bar
和值baz
一个属性:
<foo bar="baz"/>
的属性不“成为”的属性;它不是属性就是属性。
要访问的属性在XPath中,你可以使用@
(这只是为attribute::
轴的快捷方式):
/foo/@bar
也看到这些链接对XML基础知识多一点信息。
谢谢丹尼尔。但在上面的例子中,foo会被称为属性节点吗? – Beast 2013-03-03 08:13:42
@Beast - 不,'foo'是一个元素节点。 – 2013-03-03 08:15:06
@Beast - 有关不同类型节点的更多信息,请参阅上面的Datamodel.html链接。 – 2013-03-03 08:16:37
它是保持所有匹配的属性的属性值的节点。例如,如果您有以下标签:
<tag name="foo">
<child>Bar</child>
</tag>
然后XPath查询//@name
将返回“foo”的结果。如果有n标签具有该属性,它将获取属性值的所有n。
属性节点本身由两部分组成 - 名称和值。因此,在上面的例子中,它将是name="foo"
。
感谢您的回复cthulhu。在你的例子中,名字是属性节点,标签是父元素。我对你的答案的理解是正确的吗?我的另一个问题是,是否有可能创建没有任何父元素的属性节点?如果可能,你能提供一个例子吗? – Beast 2013-03-03 16:15:25
@Beast - 在XML中,你无法做到这一点,并且没有逻辑背后的逻辑。正如Dimitre提到的那样,您可以在XSLT中将属性作为独立对象应用于符合特定条件的某些元素,因此当文档转换时,此属性将被附加到元素。但是,它又与XML本身无关。 – cth 2013-03-03 19:29:39
谢谢克苏鲁! – Beast 2013-03-04 05:11:33
野兽,你需要学习一些XML的基础知识。这对您比单独提问更有用。 – 2013-03-03 15:36:54
Dimitre。我最近开始学习XML,XPath和XSLT。如果你能给我提供任何学习XML的好链接,那么这对我来说是非常有用的。 – Beast 2013-03-03 16:17:50
野兽,我可以为您提供良好的XSLT/XPath书籍的链接,但他们都假设您已经知道XML是什么:http://*.com/questions/339930/any-good-xslt-tutorial-book- blog-site-online/341589#341589 – 2013-03-03 16:43:23